我希望获得创建共享意图的应用程序名称或其包名。我正在制作通过意图接收共享数据的应用程序,如何获得创建者应用程序的包名?类似于intent.getSourceBackageName()
编辑:我不确定我的问题是否清楚。但是我需要找出调用我的应用程序的名称,例如,如果我在浏览器中共享,我需要找到一种方法来知道浏览器应用程序是与我共享数据的应用程序。
发布于 2014-11-25 01:02:34
如何获得创建者应用程序的包名?
例如,可能没有“创建者应用程序”,因为可以从命令行(adb shell am).发送ACTION_SEND Intent而且,由于ACTION_SEND不与startActivityForResult()一起使用,njzk2 2的解决方案将无法工作。
发布于 2014-11-30 21:43:52
获取启动活动的应用程序的包名:
/**
*
* @param activity
* @return The calling application's package name or {@code null} if the activity was not
* started with {@link #startActivityForResult}
*/
public static String getCallingPackageName(Activity activity) {
return activity.getCallingPackage();
}获取启动活动的应用程序名称:
/**
* Get the name of the app that started this Activity.
*
* @param activity
* @return The calling application's app name or {@code null} if the activity was not started
* with {@link #startActivityForResult}
*/
public static String getCallingAppName(Activity activity) {
final String packageName = activity.getCallingPackage();
if (packageName == null) {
return null;
}
final PackageManager pm = activity.getPackageManager();
try {
return pm.getApplicationInfo(packageName, 0).loadLabel(pm).toString();
} catch (NameNotFoundException ignored) {
}
return null;
}备注:
通过使用以下意图筛选器创建活动进行测试:
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<data android:mimeType="*/*" />
<category android:name="android.intent.category.OPENABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>打开的Gmail ->组成了一个新的消息,并选择了“附加文件”->选择了测试应用程序。
getCallingAppName(this)返回的文档
getCallingPackageName(this)返回com.android.documentsui
在我的例子中,它返回文档而不是Gmail,因为Gmail默认打开文档。因此,您应该考虑到,可能不可能真正知道最初的应用程序,结果将永远是null,除非您的Activity是用startActivityForResult调用的。
发布于 2013-04-03 13:23:49
考虑到创建一个Intent而不包含您要查找的信息是可能的,因此不可能保证能够提取它。但是,如果您检查所有带着意图到达的字段(探索intent.getCategories),您可能会发现一些模式,您可以使用这些模式来解决某些情况.
https://stackoverflow.com/questions/15786926
复制相似问题