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之MIME

一.概念:     多功能Internet 邮件扩充服务(Multipurpose Internet Mail Extensions),它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系...
  • sjz4860402
  • sjz4860402
  • 2016年04月22日 21:19
  • 1833

我的Android进阶之旅------>MIME类型大全

今天在实现一个安装apk的代码中看到一段代码为:application/vnd.android.package-archive,不知其意,所以百度了一下,了解到这是一种MIME的类型,代表apk类型。...
  • qq446282412
  • qq446282412
  • 2015年07月28日 11:27
  • 2777

认识Android中的MIME Type

MIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type),MIME使用一个简单的字符串组成,...
  • ldld1717
  • ldld1717
  • 2016年08月11日 10:08
  • 741

android 多媒体文件关联之MIME TYPE

在我们打开手机中的文件夹,并点击文件时,会跳出一个dialog的选项面板,上面显示的就是我们点击的文件所有关联的应用,也就是能够用这些应用来读取我们的文件;下面要描述的就是,开发者如在自己的应用中实现...
  • elvis02
  • elvis02
  • 2014年03月27日 19:54
  • 767

Android开发——联系人中几种常见的mimetype、几张常见表的Uri

2个常见的Uri "content://com.android.contacts/raw_contacts" "content://com.android.contacts/data" 3中常见的...
  • caihongshijie6
  • caihongshijie6
  • 2013年09月06日 19:12
  • 3246

android通讯录 MIMETYPE DATA1~DATA15

1、在Data中有一大段的公共数据段,DATA1~DATA15。       2、上面说的那些公共数据段所存的数据类型是由这个MIMETYPE决定的。  如果MIMETYPE的值是Phone.CO...
  • lcugym
  • lcugym
  • 2014年02月25日 11:41
  • 1818

android 文件关联 mimeType

android手机中经常看到用xx播放,用xxx浏览器,分享到xxx等.这种菜单 实现关键代码: [html] view plain copy  print?...
  • u011467537
  • u011467537
  • 2016年03月21日 22:30
  • 2441

Android 常用 mimeType 表及用法

常用mimeType表: 文件类型 mime名称   文件类型 mime名称 3gp video/3gpp...
  • panhongjin
  • panhongjin
  • 2014年04月01日 11:57
  • 1482

android 文件关联之mimetype

很多人都看过在文件管理器中点击一个文件,会弹出很多可供选择的打开方式,如下图: ![这里写图片描述](http://img.blog.csdn.net/20170105194855110?waterm...
  • qq_33261386
  • qq_33261386
  • 2017年01月05日 20:46
  • 275

android学习—— MimeType的用途以及所有类型

Android中MimeType的用途                 Intent-Filter中的有一个mimeType . 它的作用是告诉Android系统本Activity可以处理的文件的类...
  • janronehoo
  • janronehoo
  • 2012年04月26日 16:28
  • 21351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android源码开发之mimeType分享
举报原因:
原因补充:

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