解決Android通知欄遇到的坑:動態註冊廣播無法觸發點擊事件

通過點擊通知欄發送廣播有個坑:動態註冊廣播無法觸發點擊事件,其實是可以解決的。

代碼示例:

//AndroidManifest清單文件配置
<receiver android:name=".MyReceiver"/>

//點擊事件接收的廣播
public class MyReceiver extends BroadcastReceiver {
    public static final String ACTION_SWITCH_CLICK = "com.example.test.MY_BROADCAST";

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (ACTION_SWITCH_CLICK.equals(action)) {
            Toast.makeText(context, "點擊事件", Toast.LENGTH_SHORT).show();
        }
    }
}

...省略RemoteViews創建部分代碼
// Intent intent = new Intent("com.example.test.MY_BROADCAST"); // 構造函數1

Intent intent = new Intent(mContext,MyReceiver.class); // 構造函數2
intent.setAction("com.example.test.MY_BROADCAST");

PendingIntent pendingIntent = PendingIntent
                        .getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

如果廣播是動態註冊,用第一種(action的方式)可以響應通知欄點擊事件,用第二種(class的方式)構造函數生成Intent,就無法響應。

如果廣播是靜態註冊,第二種方式纔可以響應。

原因:靜態註冊的廣播,PMS在安裝應用時註冊廣播類,Intent顯示通過類去尋找目標,則可以找到,而動態註冊是隱式廣播,Intent再通過顯示方式去尋找就會找不到,儘管後面setAction也無效。(由於網上沒有找到答案,個人分析的)

綜上,解決辦法有2個

1)Intent對象用action生成
2)廣播改爲靜態註冊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章