通過點擊通知欄發送廣播有個坑:動態註冊廣播無法觸發點擊事件,其實是可以解決的。
代碼示例:
//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)廣播改爲靜態註冊