来源于:开源中国http://my.oschina.net/banxi/blog/91383
下面分享一个具体的应用场景:android指定分享到新浪微博
一般的分享我们是这样做的:
private void share() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "分享我的文章");
intent.putExtra(
Intent.EXTRA_TEXT,"我刚发表的文章,来看看吧,地址:http://aa.bb.cc/a.html");
intent.putExtra(Intent.EXTRA_TITLE, "分享我的文章");
String title = "分享我的文章给好友";
Intent chooser = Intent.createChooser(intent, title);
startActivity(chooser);
}
这段代码会弹出一个可以用于分享的选择器,然后选择某一项来分享。
但是我们需要直接分享到新浪微博呢?
首先,我们可以通在安装有新浪微博的设备上运行,
Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); PackageManager pm = getPackageManager(); List<ResolveInfo> list = pm.queryIntentActivities(intent, 0);
还得到所以可以用于分享的组件,然后不管是通过调试或者打印得出来,某你所想要分享的组件的信息。
如新浪微博的的包名为"com.sina.weibo"
于是可以通过判断包名,来打开指定的分享intent,代码如下:
PackageManager pm = getPackageManager(); List<ResolveInfo> matches = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); String packageName = "com.sina.weibo"; ResolveInfo info = null; for (ResolveInfo each : matches) { String pkgName = each.activityInfo.applicationInfo.packageName; if (packageName.equals(pkgName)) { info = each; break; } } if (info == null) { ToastUtils.showShort(context, "没有找到新浪微博"); return; } else { intent.setClassName(packageName, info.activityInfo.name); } startActivity(intent);