Email模块(1)-图库分享无Email

1. 解决方法

此为Android5.0 Email的新design,在没有登入任何account时,不能使用email分享。请参考AccountReconciler类中reconcileAccountsInternal()方法。

//modified by HQ_wangshiqing for AL1016-447 at 20161018 begin
//context.getPackageManager().setComponentEnabledSetting(componentName, 
//enableCompose ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
//PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
//PackageManager.DONT_KILL_APP); 
context.getPackageManager().setComponentEnabledSetting(componentName, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
      PackageManager.DONT_KILL_APP);
//modified by HQ_wangshiqing for AL1016-447 at 20161018 end```
### 2. 分析
Android系统自带的分享功能使用的隐式启动Activity的方法,这里的Action使用的是*ACTION_SEND*(**android.intent.action.SEND**)

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);```

3. 应用

在Android系统中如何给应用增加分享功能,怎样将应用加入系统的分享选择列表? Intent.createChooser()方法用来弹出系统分享列表。但是,查看Intent对应的组件是否存在,可查看Android判断Intent是否存在,是否可用,当Android系统调用Intent时,如果没有找到Intent匹配的Activity组件Component,那么应用将报以下错误: android.content.ActivityNotFoundException: Unable to find explicit activity class。所以在使用之前必须判断一下,代码如下:

public static boolean intentIsAvailable(Context context, Intent intent) {  
   final PackageManager packageManager = context.getPackageManager();  
   List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.GET_ACTIVITIES);  
   return list.size() > 0;
} ```
####3.1、应用
增加分享功能 若想分享图片信息需要设置setType为“image/*”,传递一个类型为Uri的参数[Intent.EXTRA_STREAM]()。 

public static void shareText(Context context, String title, String text) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, title);
intent.putExtra(Intent.EXTRA_TEXT, text);
context.startActivity(Intent.createChooser(intent, title));
}

####3.2、应用加入系统分享列表只需在AndroidManifest.xml中加入以下代码:

<activity android:name=".ShareActivity" android:label="分享到初见">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity> ```

4. Gallery 相册分享底层实现

以Gallery的第一个界面,长按一个文件或这文件夹,会弹出分享的按钮,点击分享按钮,会弹出popupWindow,里面列出可以分享的应用,下面详细的分析下这个过程:

  • Gallery SlotView.MyGestureListener.onLongPress();//长按页面,进入长按的调用流程 - Gallery ActionModeHandler.updateSelectionMenu;//去计算选中的count
  • Gallery ActionModeHandler.updateSupportedOperation().setShowAsAction();//将会触发Acionbar的View的创建和数据的准备
  • ...
  • Gallery ContainerPage.onCreateActionBar()
  • Gallery GalleryActionBar.createActionBarMenu();
  • Framework ShareActionProvider.onCreateActionView();//创建ActionBar的View,并在ShareActionProvider.java中设置监听事件
  • Framework ActivityChooserModel.Callbacks;//分享Button接下来被点击的时候,将会Callbacks对应的事件处理

在ActivityChooserModel类中的mActivities是满足条件的可以分享的Activity,当mShareActionProvider.setShareIntent(null); 此时分享将会得到响应。不过需要注意,如果这个Intent在这个地方不为null,将会导致mActivity被清空,同时当mActivities.size() == 0时,分享的按钮是无效的。

在ActivityChooserView.java中ActivityChooserModel.loadActivitiesIfNeeded()
会调用ApplicationPackageManager.queryIntentActivities()。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,409评论 25 707
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,350评论 0 17
  • 哎呀呀 ,马上就要面临找工作了,媛媛心里紧张呀. 作为一个即将毕业的Android程序媛,开始面临找工作了,...
    仇诺伊阅读 4,529评论 7 59
  • 仅个人学习记录,毫无参考性 望知悉!!! 零:面向对象 指多个class之间的关系,一般有Composition「...
    夜鶯阅读 263评论 0 0
  • 《菜根谭》有言:“欲做精金美玉的人品,定从烈火中锻来。思立揭地掀天的事功,须向薄冰上履过。” 《译文》:想拥有纯金...
    哲理大师阅读 321评论 0 0