이 팝업은 매니페스트에서 선언 한 manifest.PERMISSION.SYSTEM_ALERT_WINDOW 권한으로 인해 발생합니다 .
개발자가 알아야 할 권한의 세 가지 범주는 다음과 같습니다.
일반 권한-그들과 함께 아무것도하지 않고 Manifest에서 선언하십시오.
취약한 권한 -Manifest에서 선언하고 처음에 권한을 요청합니다. 시스템 설정을 통해 변경할 수 있습니다.
위의 위험한 권한 : SYSTEM_ALERT_WINDOW 및 WRITE_SETTINGS 가이 범주에 속합니다. 부여해야하지만 시스템 설정에 표시되지 않습니다. 이를 요청하려면 표준 방식 (int checkSelfPermission (String permission))을 사용하지 않지만 Settings.canDrawOverlays () 또는 Settings.System.canWrite ()를 적절하게 확인해야하며 그렇게하지 않으면 다음과 같은 예외가 발생합니다.
android.view.ViewRootImpl$W@1de28ad 창을 추가 할 수 없습니다.이 창 유형에 대한 권한이 거부되었습니다.
1- 아래와 같이 코드에서 직접이 권한을 요청하십시오.
public class MainActivity extends AppCompatActivity {
public final static int REQUEST_CODE = 10000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (checkDrawOverlayPermission()) {
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
}
}
public boolean checkDrawOverlayPermission() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
return false;
} else {
return true;
}
}
@Override
@TargetApi(Build.VERSION_CODES.M)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (Settings.canDrawOverlays(this)) {
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
}
}
}