无法接收卸载广播

时间:2014-02-10 11:24:32

标签: android android-intent broadcastreceiver

我正在尝试检测应用程序的卸载操作。到目前为止,我有一个特定的代码来捕获卸载操作并膨胀Activity。这是代码:

清单:

<activity
android:name=".UninstallActivity"
android:label="@string/app_name" >
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.DELETE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="package"  />
</intent-filter>
</activity>

我创建了一个名为Activity的简单UninstallActivity,它运行正常。当用户尝试卸载应用时,此Activity已被夸大。

我正在尝试使用Receiver代替Activity来监听这些意图,但我未能采取此行动。我的代码是:

清单:

<receiver android:name=".PackageUninstallReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.DELETE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="package" />
        </intent-filter>
    </receiver>

PackageUninstallReceiver:

public class PackageUninstallReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Log.d("uTag", "In the PackageUninstallReceiver onReceive()");

    if (intent.getAction().equals(Intent.ACTION_DELETE) && intent.getDataString().contains(context.getPackageName())) {
        Log.d("uTag", "Uninstallation is being happened....");
    }
}
}

首先,是否可以通过接收器收听此Intent? 如果是,我的代码出了什么问题?

2 个答案:

答案 0 :(得分:1)

您正在侦听的操作是通用的,可以在具有不同架构的任何上下文中应用。 应该正在收听的内容是包更改。

  <receiver android:name="PackageChangeReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED"/>
        <action android:name="android.intent.action.PACKAGE_REPLACED"/>
        <action android:name="android.intent.action.PACKAGE_REMOVED"/>
        <data android:scheme="package"/>
    </intent-filter>
  </receiver>

答案 1 :(得分:1)

用于启动Intent的{​​{1}}(在这种情况下,Activity为VIEW或DELETE a PACKAGE)与广播Intent完全不同。它们共享一些相同的属性,但仍然是完全不同的东西。广播Intent永远不会开始IntentActivity用于启动Intent将永远不会被Activity看到。

因此,您的问题的答案

  

首先,是否可以通过接收器收听此Intent?

是“不”。