【问题标题】:Get all Twitter clients from installed Applications从已安装的应用程序中获取所有 Twitter 客户端
【发布时间】:2014-04-08 12:50:47
【问题描述】:
我想知道列出所有安装在手机中的 Twitter 客户端是否可行。起初,我认为这可以通过将包名称与“Twitter”匹配来完成。但大多数 Android 上的 Twitter 客户端的包名中没有“Twitter”名称。
我们可以获取具有特定权限的应用程序列表,但这对我没有帮助。获取具有某些自定义 Intent 的应用程序可能也无济于事,我仍然需要找到一种方法来获取处理自定义 Intent 的应用程序列表。
这似乎不可行,但必须有某种方法至少可以让我接近我想要的。有人想了解一下吗?
【问题讨论】:
标签:
android
android-intent
【解决方案1】:
不知道有没有什么方法可以获取“推特客户端”(我们如何定义推特客户端?)。
您可以获取设备上安装的软件包的名称列表(您知道的 twitter 客户端)。
final List<PackageInfo> apps = context.getPackageManager().getInstalledPackages(0);
final String separator = ";";
final String separatorVersion = "-";
//Log.i("Package list", "num:+"+apps.size());
for (PackageInfo infoApp : apps) {
for (TwitterClient tr : mapTwitterClient.values()) {
if (infoApp.packageName.contains(tr.getPackageName()) ) { //it's a Twitter client this package?
if (!twitterClients.equals("")) {
twittersClients += separator;
}
twitterClients += tr.getCommonName()+separatorVersion+infoApp.versionName;
}
}
}
您需要创建只有 2 个属性(packageName 和 commonName)和他的 getter/setter 的类 TwitterClient。
并用你知道的所有 TwitterClient 填充地图(例如:new TwitterClient("com.twitter.android","Twitter official"));
private static final HashMap<String, TwitterClient> mapTwitterClient
此方法难度较大,请谨慎使用。