Android 8.0傳送廣播無法恢復出廠設定
阿新 • • 發佈:2018-11-19
在8.0之前做過恢復出廠的demo,執行程式碼如下:
Intent intent = new Intent(Intent.ACTION_MASTER_CLEAR);
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);intent.putExtra(Intent.EXTRA_REASON, "MasterClearConfirm");
intent.putExtra(Intent.EXTRA_WIPE_EXTERNAL_STORAGE, true);//清除資料
sendBroadcast(intent);
後面更新到8.0發現執行不了了,開啟7.0正常執行的步驟,跟蹤log提示Background execution not allowed:跟蹤到原始碼發現在BroadcastQueue的scheduleTempWhitelistLocked方法時如下的判斷影響到後面是否能成功執行恢復出廠設定
在8.0Setting原始碼中,恢復出廠時原先的Intent.ACTION_MASTER_CLEAR替換為最新的Intent.ACTION_FACTORY_RESET;這一點註釋中有做說明,但最新的ACTION_FACTORY_RESET有說明不允許第三方應用使用是否對此有影響還不知。
+ Intent intent = new Intent(Intent.ACTION_FACTORY_RESET);
+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);+ intent.setPackage("android");// 在android8.0上加上intent.setPackage("android");才成功恢復出廠設定
+ context.sendBroadcast(intent);
參考文章:https://blog.csdn.net/u010923832/article/details/78874099