【问题标题】:Custom share intent activity自定义分享意图活动
【发布时间】:2012-09-22 01:37:18
【问题描述】:

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

因此我需要:

编辑: 1) 一种获取可以处理意图的应用程序列表的方法,在我的例子中是带有文本/纯 mime 类型的 ACTION.SEND 意图。

2)一种以我的消息正文和主题开头的方法。

【问题讨论】:

  • 所以?你试过什么?你学到了哪些参考资料?您需要什么样的帮助?
  • 我认为有一个内容提供者包含所有应用程序的意图,他们可以处理......但我不知道它是如何调用的,也不知道如何进行查询“给我可以处理的应用程序这个意图”。然后,给定应用程序 url(例如 vnd.youtube),我需要一种方法来给它我的短信和主题......我想我必须附加这些信息,但我不知道它是否正确..跨度>

标签: android


【解决方案1】:

获取已安装应用的列表:

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

【讨论】:

  • 查看您的代码我会说您获得了所有已安装的应用程序,而我只需要获得可以处理文本/纯 mime 类型的发送意图的应用程序...
  • 它有效,谢谢!现在我只需要一种方法来调用其中一个传递文本以共享
  • 它一直在向我发送错误消息,我在模拟器以及我的两台设备上对其进行了测试,但没有成功。
猜你喜欢
  • 1970-01-01
  • 2015-05-16
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多