自定义共享意图活动

时间:2012-10-01 07:49:47

标签: android

感谢本教程:http://mobile.tutsplus.com/tutorials/android/android-sdk-implement-a-share-intent/我知道如何简单地分享我的信息:我只是创建意图并开始活动。 但是,在startActivity调用和共享窗口的有效显示之间存在一点延迟,因此我想制作一个自定义活动,例如,针对该类型共享的合适应用程序的列表视图。

因此我需要:

编辑: 1)获取可以处理意图的应用列表的方法,在我的情况下使用text / plain mime类型的ACTION.SEND意图。

2)使用我的邮件正文和主题启动它们的方法。

1 个答案:

答案 0 :(得分:4)

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

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() 
}

并启动该套餐:

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();
        }
    }
}

修改

此方法向包管理器查询已安装的包,这些包可以使用指定的操作响应意图:

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;
}

并使用特定应用程序(可以处理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);