Android从收到的共享意图中获取应用程序的包名称

时间:2015-09-24 21:34:58

标签: android android-intent android-sharing

在我的Android应用程序中,我已在我的一个活动中注册了intent filter android.intent.action.SEND,以从其他应用程序接收数据。

        <intent-filter>
            <action android:name="android.intent.action.SEND" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="image/*" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="text/plain" />
            <data android:mimeType="application/pdf" />
            <data android:mimeType="text/x-vcard" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="image/*" />
            <data android:mimeType="application/pdf" />
        </intent-filter>

当使用共享意图与我的应用程序共享其他应用程序的数据时,此活动会收到意图。我想知道与我的应用共享数据的应用程序包名称。

我尝试了以下代码,但它总是返回null。

final String packageName = this.getCallingPackage()

有什么方法可以使用我正在接收的意图获取与我的应用共享数据的应用包名称?

2 个答案:

答案 0 :(得分:0)

如果共享意图是使用ShareCompat.IntentBuilder创建的,则会包含额外的EXTRA_CALLING_PACKAGE 但大多数应用程序不提供此信息。如果存在额外的内容,则不应将其用于任何安全关键功能,因为发件人可以自由提供他们喜欢的任何值。

答案 1 :(得分:0)

要使用 getCallingPackage(),调用方应使用 startActivityForResult(Intent,int)而不是 startActivity()。否则,它将返回null。直接来自doc:

  

注意:如果调用活动不期望结果(即它   没有使用包含的startActivityForResult(Intent,int)表单   请求代码),然后调用包将为null。

https://developer.android.com/reference/android/app/Activity.html#getCallingPackage%28%29