[英]Dynamic register to broadcast receiver not working
当我将广播接收器设置为匿名类时,他从未调用,但是当我将其设置为类并在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项目jar。
我在清单上设置此权限:
<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);
接收器工作正常并在屏幕打开时被呼叫
它们是两种动作吗:1)需要在清单中声明2)不需要在清单中声明
我最近一直在处理相同的问题。 这是您应该怎么做。
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");
由于您的AndroidManifest
文件中有<data android:scheme="package"/>
。 您也应该以编程方式使用它。 否则它将无法正常工作。
最后,您不必添加任何权限。 这些广播不需要许可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.