簡體   English   中英

動態注冊到廣播接收器不起作用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM