Android Marshmallow에서 특정 앱의 권한 화면을 프로그래밍 방식으로 여는 방법은 무엇입니까?
새로운 Android Marshmallow 릴리스에 대한 질문이 있습니다.
인 텐트 또는 이와 유사한 것을 통해 특정 앱에 대한 권한 화면을 표시 할 수 있습니까?
다음 코드로 앱 설정을 표시 할 수 있습니다-권한 화면을 직접 여는 아날로그 솔루션이 있습니까?
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", getPackageName(), null)));
나는 이미 이것에 대해 약간의 연구를했지만 적절한 해결책을 찾지 못했습니다. 모든 도움을 주셔서 감사합니다!
공식 Marshmallow 권한 비디오 ( 4m 43s 표시 )에 따르면 대신 응용 프로그램 설정 페이지를 열어야합니다 (한 번의 클릭으로 권한 페이지로 이동).
설정 페이지를 열려면
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
이건 불가능 해. 나도 그렇게 했어요. 패키지 이름과 시작할 활동을 알아낼 수있었습니다. 그러나 결국 권한이 없기 때문에 선언 할 수없는 보안 예외가 발생합니다.
최신 정보:
다른 답변과 관련하여 앱 설정 화면을 여는 것이 좋습니다. 다음 코드 로이 작업을 수행합니다.
public static void startInstalledAppDetailsActivity(final Activity context) {
if (context == null) {
return;
}
final Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + context.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(i);
}
내 기록 스택에서 이것을 원하지 않기 때문에 의도 플래그를 사용하여 제거합니다.
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
설명 앱의 세부 정보 설정 페이지를 엽니 다. 여기에서 사용자는 원하는 권한을 수동으로 할당해야합니다.
Settings.ACTION_APPLICATION_DETAILS_SETTINGS
Intent.FLAG_ACTIVITY_NEW_TASK
선택 사항 . 설정하면 새 활동으로 설정 화면 (활동)이 열립니다. 그렇지 않으면 현재 실행중인 활동에서 열립니다.
Uri.fromParts("package", getPackageName(), null)
URI를 준비하거나 작성하는 반면 getPackageName ()-애플리케이션 패키지의 이름을 리턴합니다.
intent.setData(uri)
이것을 설정하는 것을 잊지 마십시오 . 그렇지 않으면을 얻습니다 android.content.ActivityNotFoundException
. 당신이 의도를 설정했기 때문에 Settings.ACTION_APPLICATION_DETAILS_SETTINGS
안드로이드는 어떤 이름을 검색 할 것으로 기대합니다.
대신 한 줄로 특정 앱의 일반 설정을 열 수 있습니다
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
프로그래밍 방식으로 권한 화면을 열 수 없습니다. 대신 앱 설정 화면을 열 수 있습니다.
암호
Intent i = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID));
startActivity(i);
샘플 출력
더 적은 코드를 작성 Kotlin
하려면 다음을 수행하십시오.
fun Context.openAppSystemSettings() {
startActivity(Intent().apply {
action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
data = Uri.fromParts("package", packageName, null)
})
}
Martin Konecny 답변 기반
이것이 당신을 도울 것입니다
private void openSettings() {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, 101);
}
FLYME OS (Meizu)에 대해서만 이야기하는 경우 권한이있는 자체 보안 앱이 있습니다.
그것을 열려면 다음 의도를 사용하십시오.
public static void openFlymeSecurityApp(Activity context) {
Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
try {
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
원인이 아닌 BuildConfig 는 앱의 BuildConfig 입니다.
Xamarin Forms Android :
//---------------------------------------------------------
public void OpenSettings()
//---------------------------------------------------------
{
var intent = new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings,
Android.Net.Uri.Parse("package:" + Forms.Context.PackageName));
Forms.Context.StartActivity(intent);
}
실용적으로 권한을 얻는 것은 불가능 합니다 ...하지만 코드를 try {} catch {}에 넣어서 불행히도 앱을 중지시키고 캐치 바디에서 대화 상자를 만드는 것이 좋습니다. 다른 응용 프로그램에 대한 그리기 권한을 사용하도록 설정하는 작은 자습서-사용자 ... 예 버튼을 클릭하면이 코드를 넣습니다 ...
Intent callSettingIntent= new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(callSettingIntent);
이 의도는 권한을 관리하기 위해 다른 앱 에 대한 그리기 목록 을 직접 열고 다음부터는 한 번의 클릭으로 다른 앱에 대한 그리기 권한입니다 ... 나는 이것이 당신이 찾고있는 대답이 아니라는 것을 알고 있습니다 ...하지만 내 앱 에서이 작업을 수행 중입니다 ...
requestPermissions 메소드로 가능합니다
설정 페이지를 직접 볼 수는 없지만 액세스 권한을 변경할 수 있습니다.
좋은 예 :
https://www.learn2crack.com/2015/10/android-marshmallow-permissions.html
확인하고 전화 할 수있는 방법
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
}
'development' 카테고리의 다른 글
Redis에 사용되는 기본 데이터 구조는 무엇입니까? (0) | 2020.03.15 |
---|---|
React Router v4에서 히스토리로 푸시하는 방법? (0) | 2020.03.15 |
모바일 웹 페이지에서 확대 / 축소를 어떻게 비활성화 할 수 있습니까? (0) | 2020.03.15 |
비밀번호 프롬프트없이 우분투에 MySQL 설치 (0) | 2020.03.15 |
포커스를 받으면 텍스트 상자의 모든 내용을 선택하십시오 (Vanilla JS 또는 jQuery) (0) | 2020.03.15 |