[英]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.