【问题标题】:Permission denial : broadcasting intent android?权限拒绝:广播意图android?
【发布时间】:2015-03-05 07:27:19
【问题描述】:

我收到以下错误

Permission Denial: broadcasting Intent { act=com.android.vending.INSTALL_REFERRER flg=0x10 cmp=com.app/.MyBroadcastReceiver (has extras) } from null (pid=1853, uid=2000) requires com.google.android.c2dm.permission.SEND due to receiver com.app/.MyBroadcastReceiver

在我的应用中,我有 google 分析实现和 GCM 实现。

这是接收者声明

 <receiver
        android:name="com.app.MyBroadcastReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>

            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <action android:name="com.android.vending.INSTALL_REFERRER" />

            <category android:name="com.app" />
        </intent-filter>
    </receiver>

这是接收器类

public class MyBroadcastReceiver extends WakefulBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    Logger.d("intent action: " + intent.getAction());


    if("com.android.vending.INSTALL_REFERRER".equalsIgnoreCase(intent.getAction())){

        String r = intent.getExtras().getString("referrer");
        Logger.d("referrer: " + r);



    }else{

        ComponentName comp = new ComponentName(context.getPackageName(),
            AppprixGCMIntentService.class.getName());
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}

}

我该如何解决这个错误?

【问题讨论】:

标签: android google-analytics broadcastreceiver google-cloud-messaging


【解决方案1】:

在单独的接收者标签中使用 INSTALL_REFERRER...这样可以解决您的问题。

<application

android:hardwareAccelerated="true"
android:icon="@mitmap/ic_launcher"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme" >
<receiver
    android:name=".xyz"
    android:exported="true" >
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

【讨论】:

  • 这解决了我的问题。非常感谢。你也可以如何摆脱这个警告“导出的接收器不需要许可”
  • 只有当目标是棒棒糖时才会出现
  • 警告“导出的接收器不需要权限”意味着,您有一个带有某些操作的意图过滤器(这意味着默认情况下您设置了 android:exported="true" 并且它现在可以接收广播来自您应用程序之外的任何广播公司)由于它可以接收来自您应用程序之外的任何广播公司的广播,它会通过说“嘿,您确定任何广播公司都可以调用您吗?
  • 在我看来,最好只允许那些广播者调用您,这些广播者具有您通过 android:permission 为该接收器设置的权限" 您可以通过添加 android:exported= 来删除此警告接收者标签为“假”
猜你喜欢
  • 2011-04-18
  • 1970-01-01
  • 2017-05-13
  • 2019-10-24
  • 2018-01-20
  • 2013-11-18
  • 1970-01-01
  • 2014-02-23
相关资源
最近更新 更多