1. 程式人生 > >Android 8.0傳送廣播無法恢復出廠設定

Android 8.0傳送廣播無法恢復出廠設定

在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