developer tip

SYSTEM_ALERT_WINDOW-Android 6.0 및 targetSdkVersion 23에서이 권한을 자동으로 얻는 방법

optionbox 2020. 10. 26. 07:54
반응형

SYSTEM_ALERT_WINDOW-Android 6.0 및 targetSdkVersion 23에서이 권한을 자동으로 얻는 방법


Facebook, Evernote, Pocket-23 ( targetSdkVersion=23)을 대상으로하는 모든 앱은 Android 6.0에서이 권한을 자동으로 받습니다.

새로운 Marshmallow 권한 모델에 관한 많은 문서가 있습니다. 그중 하나는 SYSTEM_ALERT_WINDOW'위험 이상'권한 등급으로 '승격'되었으므로 앱에 권한을 부여하려면 특별한 사용자 개입이 필요합니다. 앱이 targetSdkVersion22 이하인 경우 앱은이 권한을 자동으로 가져옵니다 (매니페스트에서 요청한 경우).

그러나 사용자에게 Draw over other apps권한 설정 특별 페이지를 보낼 필요없이이 권한을받는 일부 앱을 발견했습니다 . 저는 페이스 북, 에버 노트, 포켓을 보았습니다.

누구나 사용자가 통과하지 않고도 앱에이 권한을 부여 할 수있는 방법을 알고 Settings -> Apps -> Draw over other apps있습니까?

감사


Marshmallow 6.0.1에 도입 된 새로운 동작 입니다.

SYSTEM_ALERT_WINDOW권한 을 요청하고 Play 스토어를 통해 설치된 모든 앱 (버전 6.0.5 이상 필요)은 자동으로 권한을 부여합니다.

대신 앱이 사이드로드 된 경우 권한이 자동으로 부여되지 않습니다. apkmirror.com 에서 Evernote APK를 다운로드하고 설치할 수 있습니다 . 보시다시피에서 권한을 수동으로 부여해야합니다 Settings -> Apps -> Draw over other apps.

Play 스토어가 권한을 자동으로 부여하도록 허용 하는 커밋 [1] [2] 입니다 SYSTEM_ALERT_WINDOW.


Yeh Marshmallow 이후 Android는 보안 수준을 더욱 강화합니다.

SYSTEM_ALERT_WINDOW

플로팅 액션 및 모든 것을 표시 할 수 있습니다. onCreate()메소드 에서 코드를 따라 사용자에게 권한을 부여하도록 할 수 있습니다. setContentView 다음에이 코드를 입력합니다.

    // Check if Android M or higher
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // Show alert dialog to the user saying a separate permission is needed
        // Launch the settings activity if the user prefers
        Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
        startActivity(myIntent);
    }

이 작업 ACTION_MANAGE_OVERLAY_PERMISSION은 '다른 앱 위에 그리기'권한 화면을 직접 시작합니다.


편집 : 위 코드가 100 % 올바르게 작동합니다

하지만 난 그냥 많은 사람들이 아직도 방법을 허용 할 수 있음을 찾고 발견 ACTION_MANAGE_OVERLAY_PERMISSION 사용자가 할 수있는 경우 허가가되면 다음마다 그는 오픈 응용 프로그램 요구하지 않는 것처럼 영구적 정도 당신이 -에 대한 듣고 솔루션

  1. 기기에 API 23 이상이 있는지 확인

  2. 23+ API 인 경우 사용자가 허가를 받았는지 확인하십시오.

  3. 한 번 허가를 받았다 Settings.ACTION_MANAGE_OVERLAY_PERMISSION그를 운전하지 않았고 아직 허가하지 않았다면 런타임 허가 확인을 요청하십시오.

귀하의 onCreate()방법에 아래 줄을 넣으십시오 . 이 뒤에 넣어setContentView

checkPermission();

이제 코드 아래에 넣으십시오. onActivityResult

@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
        if (!Settings.canDrawOverlays(this)) {
            // You don't have permission
            checkPermission();
        } else {
            // Do as per your logic 
        }

    }

}

이제 마지막으로 checkPermission 메소드 코드

public void checkPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (!Settings.canDrawOverlays(this)) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                    Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
        }
    }
}

그리고 클래스에서이 공용 변수를 선언하는 것을 잊지 마십시오.

public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;

Now(2019) that Google offers an alternative API to SYSTEM_ALERT_WINDOW in the form of Bubbles in Android Q, Google has decided to eventually deprecate SYSTEM_ALERT_WINDOW in a future Android release.

And Android Go devices will no longer grant this permission i.e Settings.canDrawOverlays() == false


If the app targets API 22 or lower, then Play Store will give the SYSTEM_ALERT_WINDOW permission and others when the user clicks to install (showing an alert) even if its device is Android 6.0 Otherwise, if the app targets API 23 or above, so that permission will be request to grant in run time.

참고URL : https://stackoverflow.com/questions/36016369/system-alert-window-how-to-get-this-permission-automatically-on-android-6-0-an

반응형