【问题标题】:How to get label from the intent-filter in android?如何从android中的intent-filter获取标签?
【发布时间】:2017-11-08 17:14:51
【问题描述】:
我正在制作自定义共享对话框。所以,我想列出设备中所有可以进行 SEND 操作的应用程序。示例代码:
<activity android:name=".SomeActivity">
<intent-filter android:label="@string/short_app_name"
android:icon="@drawable/test_icon"
android:label="@string/long_activity_title">
<action android:name="android.intent.action.SEND" />
</intent-filter>
</activity>
我可以轻松地从 ResolveInfo 的活动标签中获取标签,但我无法找到以编程方式从意图过滤器中获取标签的方法。那么让我们知道有没有办法从意图过滤器中获取清单中相应活动的标签?
【问题讨论】:
标签:
android
android-intent
android-manifest
android-sharing
【解决方案1】:
你错了。 ResolveInfo 为您提供<intent-filter> 图标和标签。 ActivityInfo 从 <activity> 标签中提取。
【解决方案2】:
这是一个执行此操作的快速代码示例,我在阅读了您的问题和@j__m 的答案以及其他一些资源后编写了该示例:
Intent i2 = new Intent(Intent.ACTION_PROCESS_TEXT);
i2.setType("text/plain");
PackageManager manager = getPackageManager();
List<ResolveInfo> infos = manager.queryIntentActivities(i2,
PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo info : infos) {
try {
Log.d("TEST", "Package name: ", info.activityInfo.applicationInfo.packageName);
Resources res = manager.getResourcesForApplication(info.activityInfo.applicationInfo);
int labelRes = info.labelRes;
if (labelRes == 0)
labelRes = info.activityInfo.labelRes;
Log.d("TEST", " - Title: ", res.getString(labelRes));
} catch (PackageManager.NameNotFoundException ignore) {}
}