Android源码开发之mimeType分享

原创 2015年11月20日 11:03:41

好久没有分享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了

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android MimeType的用途以及所有类型

From: http://blog.csdn.net/chenqian_lj/article/details/24179461 MIME TYPE描述 多用途互联网邮件扩展(MIME,Mu...
  • fyfcauc
  • fyfcauc
  • 2015年02月15日 16:38
  • 309

android 4.4所支持MimeType

以下是从android 4.4源码MimeUtils中所提取出来的android所能识别的的扩展名及其对应mimeType.java add("application/andrew-...
  • PIYELL
  • PIYELL
  • 2016年11月05日 23:27
  • 635

Android 常用mimeType表

转自:http://www.cnblogs.com/Rooty/archive/2011/07/16/2107962.html 一、MIME TYPE描述 多用途互联网邮件扩展(MIME,...

android mimeType

理论参考:http://blog.csdn.net/androidzhaoxiaogang/article/details/6853100 代码为自己添加 多用途互联网邮件扩展(MIME,...

备份:Android 常用 mimeType 表

一、MIME TYPE描述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非AS...
  • iRooty
  • iRooty
  • 2011年08月12日 22:40
  • 384

Android 常用mimetype类型

3gp video/3gpp  aab application/x-authoware-bin  aam application/x-authoware-map  aas application/x-...
  • winsonx
  • winsonx
  • 2011年07月28日 15:58
  • 595

android 入门学习笔记 取得文件架构、打开文件、判断文件MimeType 的方法

/* 变量声明 items:存放显示的名称 paths:存放文件路径 rootPath:起始目录 */ private List items=nul...
  • kof820
  • kof820
  • 2011年07月26日 14:33
  • 2001

Android 常用 mimeType 表

一、MIME TYPE描述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCI...

android中用到的MimeType的处理方式

一、MIME TYPE描述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非AS...

【转】备份:Android 常用 mimeType 表

转自:http://www.cnblogs.com/Rooty/archive/2011/07/16/2107962.html 一、MIME TYPE描述 多用途互联网邮件扩展(MIME,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android源码开发之mimeType分享
举报原因:
原因补充:

(最多只允许输入30个字)