看來,沒有辦法觀察這個設置,所以實際上沒有優雅的解決方案。
您可以執行的操作是將用戶發送到設置屏幕後,使用Handler每秒檢查一次設置。
您不能從設置屏幕以編程方式真正地「返回」,因此唯一的選擇是重新啓動活動並清除以前的活動(否則它會在後退按回到設置屏幕) 。
下面的例子中,在啓用設置的一秒內,它將重新啓動MainActivity。
首先定義了Runnable:
Handler handler = new Handler();
Runnable checkOverlaySetting = new Runnable() {
@Override
@TargetApi(23)
public void run() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return;
}
if (Settings.canDrawOverlays(MainActivity.this)) {
//You have the permission, re-launch MainActivity
Intent i = new Intent(MainActivity.this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
return;
}
handler.postDelayed(this, 1000);
}
};
然後開始了Runnable當您發送用戶設置屏幕:
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
//Add this here:
handler.postDelayed(checkOverlaySetting, 1000);
請注意,您應該設置超時或最大努力使之如果用戶沒有啓用覆蓋設置,它將不會永遠持續。
無論你想做什麼,你都可以在onActivityResult()方法中做到。檢查resultCode是否等於Activity.RESULT_OK,然後做任何你想做的事情。 –
對不起,我錯過了原始問題中的一些單詞。我可以根據結果做些東西,但是我要做的是讓它自動返回到活動狀態,而無需用戶按下。 –