Notice
Recent Posts
Recent Comments
Link
투케이2K
233. (AndroidStudio/android/java) QUERY_ALL_PACKAGES 앱 쿼리 상호 작용 권한 부여 실시 본문
Android
233. (AndroidStudio/android/java) QUERY_ALL_PACKAGES 앱 쿼리 상호 작용 권한 부여 실시
투케이2K 2021. 12. 13. 13:47[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : java
[소스 코드]
// [AndroidManifest.xml 파일]
<!-- QUERY_ALL_PACKAGES : 런처, 접근성, 브라우저, 보안 앱 등에서 기기에 설치된 모든 앱을 쿼리하거나 상호작용 하기 위함 -->
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
// TODO [QueryAllPackagesPermission 앱 설정 창 이동]
public static void checkQueryAllPackages(Context mContext){
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) && !isAccessGranted(mContext)){
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Permission >> checkQueryAllPackages() :: 앱 쿼리 권한 상태 확인]");
Log.i("","\n"+"[상태 :: "+"앱 쿼리 권한 부여되지 않은 상태 >> 앱 쿼리 권한 설정 창 이동 실시"+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
// [Android Q 이상 버전에서 원격 제어앱 탐지를 위해 사용자 정보 접근 권한 필요]
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
Uri uri = Uri.fromParts("package", mContext.getPackageName(), null);
intent.setData(uri);
mContext.startActivity(intent);
}
else if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) && isAccessGranted(mContext)) {
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[C_Permission >> checkQueryAllPackages() :: 앱 쿼리 권한 상태 확인]");
Log.i("","\n"+"[상태 :: "+"앱 쿼리 권한 부여된 상태"+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
}
else {
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[C_Permission >> checkQueryAllPackages() :: 앱 쿼리 권한 상태 확인]");
Log.i("","\n"+"[상태 :: "+"Android Q 버전 이하 단말기"+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
}
}
// [타겟 api 설정 실시]
@TargetApi(Build.VERSION_CODES.Q)
private static boolean isAccessGranted(Context mContext) {
boolean granted = false; // 권한 부여 상태값 저장
int mode = -1;
PackageManager pm;
ApplicationInfo app;
AppOpsManager appOpsManager;
try {
// [AppOpsManager 서비스 객체 생성 실시]
appOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
pm = mContext.getPackageManager();
app = pm.getApplicationInfo(mContext.getPackageName(), 0);
// [권한 부여 상태값 얻오온다]
if (appOpsManager != null) {
mode = appOpsManager.unsafeCheckOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, app.uid, app.packageName);
}
// [권한 부여가 된 경우]
if (mode == AppOpsManager.MODE_ALLOWED) {
granted = true;
}
}
catch (Throwable why) {
//why.printStackTrace();
}
// [결과 반환 실시]
return granted;
}
반응형
'Android' 카테고리의 다른 글
Comments