为什么内容方案会忽略MY_PACKAGE_REPLACED Android操作

时间:2016-09-02 14:41:09

标签: android broadcast intentfilter

我在广告的清单中有一个intent-filter声明。

       <intent-filter>
            <action android:name="android.intent.action.TIME_SET"/>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
            <data android:scheme="content"/>
        </intent-filter>

问题是当我移除<data android:scheme="content"/> MY_PACKAGE_REPLACED 操作时收到,否则为。

在这种情况下,数据标签是什么?无法从文档中真正理解。

2 个答案:

答案 0 :(得分:3)

<data>元素表示&#34; Uri上必须有Intent,且必须符合<data> <intent-filter>元素中提供的规则{1}}&#34 ;.在您的特定情况下,规则为&#34; Uri必须存在且必须具有content方案&#34;。

由于这三个广播中没有一个使用content Uri,因此请删除<data>元素。

答案 1 :(得分:0)

对于MY_PACKAGE_REPLACED,你只需使用它:

<receiver
  android:name=".UpgradeReceiver" android:enabled="true" android:exported="true">
  <intent-filter>
    <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
  </intent-filter>
</receiver>



public class UpgradeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {
        if (!Intent.ACTION_MY_PACKAGE_REPLACED.equals(intent.getAction()))
            return;
    ...  
    }
}

此外,请确保在禁用即时运行时运行应用,如上所述here。我注意到如果启用它并不总是收到...