Facebook, Evernote, Pocket-23 ( targetSdkVersion=23
)을 대상으로하는 모든 앱은 Android 6.0에서이 권한을 자동으로 받습니다.
새로운 Marshmallow 권한 모델에 관한 문서가 많이 있습니다. 그중 하나는 SYSTEM_ALERT_WINDOW
‘위험 이상’권한 등급으로 ‘승급’되어 앱에 권한을 부여하기 위해 특별한 사용자 개입이 필요합니다. 앱이 targetSdkVersion
22 이하인 경우 앱은이 권한을 자동으로 가져옵니다 (매니페스트에서 요청한 경우).
그러나 사용자에게 Draw over other apps
권한 설정 특별 페이지를 보낼 필요없이이 권한을받는 일부 앱을 발견했습니다 . 저는 Facebook, Evernote, Pocket을 봤습니다.
누구든지 사용자가 통과하지 않고도 앱에이 권한을 부여 할 수있는 방법을 알고 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()
메소드 에서 코드를 따라 사용자에게 권한을 부여 할 수 있습니다.
// 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
사용자가 할 수있는 경우 허가가되면 다음마다 그는 오픈 응용 프로그램 요구하지 않는 것처럼 영구적 정도 당신이 -에 대한 듣고 솔루션
-
기기에 API 23 이상이 있는지 확인
-
23+ API이면 사용자가 허가를 받았는지 확인하십시오.
-
한 번 허가를 받았다
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;
답변
이제 ( 2019 ) Google이 Android Q에서 BubblesSYSTEM_ALERT_WINDOW
의 형태로 대체 API를 제공하므로 Google은 향후 Android 릴리스에서 결국 지원 중단하기로 결정했습니다 .SYSTEM_ALERT_WINDOW
그리고 안드로이드 이동 장치는 더 이상이 권한을 부여하지 않습니다
즉Settings.canDrawOverlays() == false
답변
매니페스트의 SYSTEM_ALERT_WINDOW 외에 Play 스토어에서 앱을 다운로드 할 때 자동으로이 권한을 받으려면 이 링크 로 이동하여 Google에 요청 해야합니다 .
이 권한이 필요한 이유에 대한 추가 정보를 제공해야하며 Google에서 검토하여 자동으로 권한을 부여합니다.
이를 요청하기 전에 다음을 수행해야합니다.
-
매니페스트에 SYSTEM_ALERT_WINDOW 권한이 있습니다.
-
아직 부여되지 않은 경우 사용자에게 앱 내에서 SYSTEM_ALERT_WINDOW 권한을 부여하라는 메시지를 표시합니다.
내가 뭔가를 놓친 경우 언제든지 답변을 업데이트하십시오.
답변
앱이 API 22 이하를 타겟팅하는 경우 기기가 Android 6.0 인 경우에도 사용자가 클릭하여 설치 (경고 표시) 할 때 Play 스토어에서 SYSTEM_ALERT_WINDOW 권한 및 기타 권한을 부여합니다. 그렇지 않으면 앱이 API 23 이상을 타겟팅하면 권한은 런타임에 부여하도록 요청됩니다.