自定义共享意向活动 [英] Custom share intent activity

查看:122
本文介绍了自定义共享意向活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于本教程:的http://mobile.tutsplus.com/tutorials/android/android-sdk-implement-a-share-intent/我知道如何去分享我的留言:我简单地创建意图,并开始活动。 然而,有startActivity呼叫,有效显示共享窗口之间的一个小的延迟,所以我想提出一个自定义的活动,例如,适合的应用程序的该类型的共享列表视图。

因此​​,我需要的:

编辑: 1)一种方式来获得的应用程序至极列表可以处理这个意图,在我的案件与纯文本/ MIME类型的ACTION.SEND意图。

2)的方式与我的邮件正文和主题启动它们。

解决方案

获取安装的应用程序的列表:

 最后PackageManager PM = getPackageManager();

名单< ApplicationInfo>包= pm.getInstalledApplications(PackageManager.GET_META_DATA);

对于(ApplicationInfo packageInfo:包){

   Log.d(TAG,安装包:+ packageInfo.packageName);
   Log.d(TAG,启动活动:+ pm.getLaunchIntentForPackage(packageInfo.packageName));

   } //该getLaunchIntentForPackage返回,您可以使用startActivity使用意向()
}
 

和启动该包:

 保护无效launchApp(字符串的packageName){

意图mIntent = getPackageManager()getLaunchIntentForPackage(的packageName)。
如果(mIntent!= NULL){
尝试 {
startActivity(mIntent);
}赶上(ActivityNotFoundException ERR){
吐司T = Toast.makeText(getApplicationContext()
应用程序未找到,Toast.LENGTH_SHORT);
t.show();
}
}
}
 

修改

此方法查询软件包管理器安装的软件包,可以与指定的操作意图作出回应:

 公共静态布尔isIntentAvailable(上下文的背景下,串动){
最终PackageManager packageManager = context.getPackageManager();
最终意向意图=新的意图(动作);
名单< ResolveInfo>名单=
packageManager.queryIntentActivities(意向,PackageManager.MATCH_DEFAULT_ONLY);
返回则为list.size()> 0;
}
 

和使用特定的应用程序(可处理ACTION_SEND)分享您的文本

  ResolveInfo信息= list.get(指数);
意向意图=新的意图(android.content.Intent.ACTION_SEND);
intent.setClassName(info.activityInfo.packageName,info.activityInfo.name);
intent.setType(text / plain的);
intent.putExtra(Intent.EXTRA_SUBJECT,学科);
intent.putExtra(Intent.EXTRA_TEXT,身体);
((活动)范围内).startActivity(意向);
 

Thanks to this tutorial: http://mobile.tutsplus.com/tutorials/android/android-sdk-implement-a-share-intent/ I know how to simply share my message: I simply create the intent and start activity. However, there's a little latency between startActivity call and effective show of the share windows so I'd like to make a custom activity with, for example, a listview of suitable apps for that type of sharing.

I thus need:

edit: 1) A way to get a list of apps wich can handle the intent, in my case an ACTION.SEND intent with a text/plain mime type.

2)A way to start them with my message body and subject.

解决方案

Get the list of installed application:

final PackageManager pm = getPackageManager();

List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {

   Log.d(TAG, "Installed package :" + packageInfo.packageName);
   Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); 

   }// the getLaunchIntentForPackage returns an intent that you can use with startActivity() 
}

and to launch that package:

protected void launchApp(String packageName) {

Intent mIntent = getPackageManager().getLaunchIntentForPackage(packageName);
if (mIntent != null) {
try {
startActivity(mIntent);
} catch (ActivityNotFoundException err) {
Toast t = Toast.makeText(getApplicationContext(),
"Application not found", Toast.LENGTH_SHORT);
t.show();
}
}
}

EDIT

This method queries the package manager for installed packages that can respond to an intent with the specified action:

public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}

and to share your text using a specific application (which can handle ACTION_SEND):

ResolveInfo info = list.get(index);
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setClassName(info.activityInfo.packageName, info.activityInfo.name);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, body);
((Activity)context).startActivity(intent);

这篇关于自定义共享意向活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆