我正在尝试检测应用程序的卸载操作。到目前为止,我有一个特定的代码来捕获卸载操作并膨胀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
?
如果是,我的代码出了什么问题?
答案 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
永远不会开始Intent
而Activity
用于启动Intent
将永远不会被Activity
看到。
因此,您的问题的答案
首先,是否可以通过接收器收听此Intent?
是“不”。