如何获取已安装的即时消息应用程序列表?

时间:2012-05-08 18:39:39

标签: android email sms android-package-managers

我的应用程序应该能够通过WhatsApp,电子邮件,短信等方式在TextView中发送文本。为此我需要一个已安装的Messging应用程序列表。我尝试使用PackageManger,但我得到了所有应用程序。我怎样才能获得即时消息应用程序?

这是我列出已安装应用的代码:

PackageManager packageManager=this.getPackageManager(); 
    List<PackageInfo> applist=packageManager.getInstalledPackages(0);
    Iterator<PackageInfo> it=applist.iterator();
    while(it.hasNext()){
    PackageInfo pk=(PackageInfo)it.next();
    if(PackageManager.PERMISSION_GRANTED==(packageManager.checkPermission(Manifest.permission.INTERNET, pk.packageName)& packageManager.checkPermission(Manifest.permission.RECEIVE_SMS, pk.packageName))) //checking if the package is having INTERNET permission
    {
    myList.add(""+pk.applicationInfo.loadLabel(packageManager));
    }
    }

2 个答案:

答案 0 :(得分:0)

如果你的目标是冰淇淋三明治,你应该使用ShareActionProvider。在那里,您可以获得所需的分享方式列表。

您还可以阅读此android-developer-blogpost,了解如何通过意图分享。例如,您的电子邮件共享:

Intent intent=new Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/plain");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

// Add data to the intent, the receiving app will decide what to do with it.
intent.putExtra(Intent.EXTRA_SUBJECT, “Some Subject Line”);
intent.putExtra(Intent.EXTRA_TEXT, “Body of the message, woot!”);

答案 1 :(得分:0)

假设你设法得到你想要的应用程序列表,那么你打算用它们做什么? 我认为你需要让android向你的用户展示一个应用程序列表,以便他们根据所执行的操作选择他们想要处理文本的应用程序。幸运的是,这是Android中的内置功能。这是我发送电子邮件的功能:

public static void StartEmailIntent (Context cx, String EmailAddress){
    Intent email = new Intent(Intent.ACTION_SEND);

    email.setType("plain/text");
    email.putExtra(Intent.EXTRA_EMAIL, new String[]{EmailAddress});

    cx.startActivity(Intent.createChooser(email, cx.getString(R.string.dlg_sendmail_selectortitle)));
}

正如您所看到的,我将Intent.ACTION_SEND设置为操作,然后使用Intent.createChooser,android会根据Intent的类型和附加内容创建一个能够处理该操作的应用程序列表。不应该很难适应其他行动,如短信,电话等。您可以在这里阅读更多相关信息Sending Content to Other Apps

希望这会有所帮助......

相关问题