Android INSTALL_REFERRER BroadcastReceiver没有注册

时间:2014-07-28 07:03:07

标签: android xml broadcastreceiver

在过去的几天里,我一直试图让一个简单的INSTALL_REFERRER BroadcastReceiver测试工作。但无论出于什么原因,无论我做什么,我似乎无法通过XML静态注册我的广播接收器:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.packagepath" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:name="com.packagepath.CustomApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MyActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <!-- Used for Google Play Store Campaign Measurement-->;
    <receiver android:name=".CustomReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>
</manifest>

我100%确定包名是正确的。但是,我的应用程序注册接收器的唯一时间是我在我的代码中手动执行此操作:

protected void onResume() {
    super.onResume();
    if (cr == null)
        cr = new CustomReceiver();
    IntentFilter ir = new IntentFilter("com.android.vending.INSTALL_REFERRER");
    registerReceiver(cr, ir);

    Intent i = new Intent("com.android.vending.INSTALL_REFERRER");
    i.setPackage("com.packagepath");
    i.putExtra("referrer", "test");
    sendBroadcast(i);
}

这里是参考CustomReceiver的代码:

public class CustomReceiver extends BroadcastReceiver {

    private static final String D_TAG = "CustomBR";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(D_TAG, "CustomReceiver onReceive (context, intent)");
    }
}

我也遇到了通过ADB向设备发送广播意图的问题。但无论出于何种原因我都无法接收广播以接收我的申请。我已尝试过以下示例的多种变体,现在运气好了。 (注意:唯一改变的是packagepath)

am broadcast -a com.android.vending.INSTALL_REFERRER -n com.packagepath/.CustomReceiver

am broadcast -a com.android.vending.INSTALL_REFERRER -n com.packagepath/com.packagepath.CustomReceiver --es "referrer" "utm_source=testSource&utm_medium=testMedium&utm_term=testTerm&utm_content=testContent&utm_campaign=testCampaign"

am broadcast -a com.android.vending.INSTALL_REFERRER -n com.packagepath/.CustomReceiver --es "referrer" "utm_source=testSource&utm_medium=testMedium&utm_term=testTerm&utm_content=testContent&utm_campaign=testCampaign"

我实际上获得BroadcastReceiver的绝对唯一时间是我手动注册接收器并在应用程序中手动调用广播。有人可以让我知道我做错了什么,因为我一直在寻找几天,但无法理解。谢谢!

1 个答案:

答案 0 :(得分:0)

好的,这是一个老问题,你现在可能已经知道了,但是:

1)在清单xml文件中,接收者标记应该(可能)在<application>中。 2)您不需要为“静态”广播接收器创建意图过滤器。 (即:清单xml文件中定义的一个)