当我将我的广播接收器设置为匿名课程时,他从未打过电话 但是当我将它设置为类并在android上声明它时,它的工作正常
我希望能够动态注册和取消注册广播接收器 为什么它不会工作
这是我的代码:
public class AppChangedProbe extends Probe.Base implements Probe.ContinuousProbe{
private BroadcastReceiver appReceiver;
@Override
protected void onEnable() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
appReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED))
Logger.i(getClass(), "App Removed");
if (intent.getAction().equals(Intent.ACTION_PACKAGE_CHANGED))
Logger.i(getClass(),"App Updated");
if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED))
Logger.i(getClass(),"App Added");
}
};
getContext().registerReceiver(appReceiver, filter);
}
@Override
protected void onDisable() {
getContext().unregisterReceiver(appReceiver);
}
@Override
protected boolean isWakeLockedWhileRunning() {
return false;
}
}
Probe.Base和Probe.ContinuousProbe是FUNF项目罐。
我在清单上设置了这个权限:
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" />
当我使用广播接收器作为其工作类时
这是有效的代码:
public class AppChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED))
Logger.i(getClass(),"App Removed");
if (intent.getAction().equals(Intent.ACTION_PACKAGE_CHANGED))
Logger.i(getClass(),"App Updated");
if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED))
Logger.i(getClass(),"App Added");
}
}
并在清单中:
<receiver android:name =".sensors.EventBaseProbes.AppChangedReceiver">
<intent-filter android:priority="100">
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<action android:name="android.intent.action.PACKAGE_CHANGED"/>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<data android:scheme="package"/>
</intent-filter>
发生的事情是,当我使用其他行动时,它会以两种方式工作。
例如,如果我将示例中的过滤器替换为此过滤器
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
接收器工作正常并在屏幕开启时调用
他们是2种行动: 1)需要在清单上声明 2)不需要在清单上声明
答案 0 :(得分:4)
我最近一直在处理同样的问题。这是你应该怎么做。
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addDataScheme("package");
由于<data android:scheme="package"/>
文件中包含AndroidManifest
。你也应该以编程方式使用它。否则它就不会起作用。
最后,您不必添加任何权限。这些广播不需要许可。