您的位置:首页 > 移动开发 > Android开发

Android分享中,如何过滤指定的应用,并且对不同的分享方式发送不同的内容?

2016-05-19 11:31 531 查看

Android分享中,如何过滤指定的应用,并且对不同的分享方式发送不同的内容?

安卓系统本身可以很简便的实现分享功能,因为我们只需向startActivity传递一个
ACTION_SEND
的Intent,系统就为我们弹出一个应用程序列表,如果我们再指定intent为chooser的方式,那么这个列表就就会有个指定的标题,如下:



这就是分享界面。

其实凡是以隐式intent调用activity,如果能处理该intent的应用有多个的话,都会出现一个选择应用的对话框,这种对话框除了列出应用列表,还为你提供是永久选择,还是只是这次选择。比如我们发送了这样一个浏览网页的intent:

那么系统会为我们列出能接收这个intent的应用(一般浏览器都会实现,相当于一种约定),界面如下:


注意上面的对话框只是单纯列出了应用,而且比分享对话框还多了两个选择方式的按钮,所以仅仅这样还不符合分享功能的需求。

分享的需求有两点:

每次都列出所有应用;

不再提示只是一次选择还是永久选择;

为此,我们需要通过Intent来创建chooser:

intent的createChooser
方法调用后,上面提到的两个不符合需求的问题就不存在了,其实这就是分享功能的本质,他只不过是利用了Intent的机制而已。

利用系统的api实现分享的代码如下:

一般,通过上面的代码,提供的分享方式有各种应用:邮件,信息,蓝牙,微博,Twitter,二维码扫描器等。

但是,第一:我想过滤掉蓝牙,

其次:我想对邮件分享详细的内容,对信息和微博等分享较简短的内容,对二维码扫描器只分享URL。

解决的办法是得到所有能处理
ACTION_SEND
的应用程序包名,然后根据名字来过滤或者特殊处理。主要用到
getPackageManager().queryIntentActivities
方法。

如果我们想指定一个应用来分享,那么可以将上面的代码做些修改:

然后在需要分享的地方加上:

其实这种方法的前提是你必须知道某个应用的包名大致是什么样,比如qq的微信和微博的包名其实没有qq

initShareIntent(
"qq"
);是没有用的,你可以先将他们打印出来看长什么样子,然后在调用。以下是我总结的一些常用应用包名:




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: