华歌诗的博客

分享android开发的经验

Android源码开发之mimeType分享

好久没有分享Android开发的经历了

遇到一个小bug,apk分享界面没有蓝牙,这种问题很好解,Bluetooth里本身支持apk类型文件的分享,没有分享,可能是没有在AndroidManifest.xml文件里注册,于是在

<activity android:name=".opp.BluetoothOppLauncherActivity"
            android:process="@string/process"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:label="@string/bt_share_picker_label"
            android:excludeFromRecents="true"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:enabled="@bool/profile_supported_opp">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="image/*" />
                <data android:mimeType="video/*" />
                <data android:mimeType="audio/*" />
                <data android:mimeType="text/x-vcard" />
                <data android:mimeType="text/plain" />

后面加一条<data android:mimeType="application/vnd.android.package-archive" />就可以了

原本以为问题会这样解决,可是又遇到了一个新问题,apk文件,点击分享就会直接打开蓝牙分享,而不会弹出选择分享的dialog。

经分析,Android源码里,默认的几个app,只有蓝牙和email支持apk文件分享

查看分享的代码

intent = new Intent();
                intent.setAction(Intent.ACTION_SEND);
                intent.setType(mimeType);
                Uri uri = Uri.fromFile(fileInfo.getFile());
                intent.putExtra(Intent.EXTRA_STREAM, uri);
                LogUtils.d(TAG, "Share Uri file: " + uri);
                LogUtils.d(TAG, "Share file mimetype: " + mimeType);
                Log.i("type", "uri= "+uri);
                Log.i("type", "intent= "+Intent.createChooser(intent, getString(R.string.send_file)));
                try {
                    startActivity(Intent.createChooser(intent, getString(R.string.send_file)));
                } catch (android.content.ActivityNotFoundException e) {
                    LogUtils.e(TAG, "Cannot find any activity", e);
                }

Log打出来

I/type    ( 3143): ----------------Share-------------
I/type    ( 3143): mimeType= application/vnd.android.package-archive
I/type    ( 3143): uri= file:///storage/sdcard0/Pictures/antutu.apk
I/type    ( 3143): intent= Intent { act=android.intent.action.CHOOSER (has extras) }
I/type    ( 3143): ----------------Share-------------
I/type    ( 3143): mimeType= image/jpeg
I/type    ( 3143): uri= file:///storage/sdcard0/DCIM/Camera/IMG_20150101_000853.jpg
I/type    ( 3143): intent= Intent { act=android.intent.action.CHOOSER (has extras) }

感觉都没什么问题,于是分析,可能Email有问题,Email支持所有类型文件的分享

               <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />

最后登录Email,竟然可以分享了

找到原因了

在packages/apps/Email/provider_src/com/android/email/provider/AccountReconciler.java

    private static boolean reconcileAccountsInternal(
            final Context context,
            final List<Account> emailProviderAccounts,
            final List<android.accounts.Account> accountManagerAccounts,
            final boolean performReconciliation) {

--------------------

            final ComponentName componentName = new ComponentName(context, composeActivityName);
            context.getPackageManager().setComponentEnabledSetting(componentName,
                    enableCompose ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
                            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);

将PackageManager.COMPONENT_ENABLED_STATE_DISABLED改为PackageManager.COMPONENT_ENABLED_STATE_ENABLED

就OK了

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huageshiya/article/details/49944437
个人分类: MTK二次开发
上一篇Android判断gps是否打开
下一篇Android源码开发之蓝牙通知振动
想对作者说点什么? 我来说一句

Android DeskClock

2013年07月17日 791KB 下载

Android Contact

2013年07月17日 3.36MB 下载

没有更多推荐了,返回首页

关闭
关闭