微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 如何以编程方式获取用法访问权限

我的应用程序需要具有使用权限访问权限才能获得有关用户手机上当前正在运行的应用程序的信息.我可以使用以下代码在以下链接的帮助下成功实现它.

Usage Access apps

这是我的工作代码

public void showDialog()
 {
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {

         @SuppressWarnings("WrongConstant")
         UsageStatsManager usm = (UsageStatsManager) getSystemService("usagestats");
         long time = System.currentTimeMillis();
         List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,time - 1000 * 1000,time);
         if (appList.size()==0)
         {
             AlertDialog alertDialog = new AlertDialog.Builder(this)
                     .setTitle("Usage Access")
                     .setMessage("App will not run without usage access permissions.")
                     .setPositiveButton("Settings",new DialogInterface.OnClickListener() {
                         @TargetApi(Build.VERSION_CODES.LOLLIPOP)
                         public void onClick(DialogInterface dialog,int which) {
                             // continue with delete
                             Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
                            // intent.setComponent(new ComponentName("com.android.settings","com.android.settings.Settings$SecuritySettingsActivity"));
                             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                             startActivityForResult(intent,0);
                         }
                     })
                     .setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog,int which) {
                             // do nothing
                             dialog.dismiss();
                         }
                     })
                     .setIcon(android.R.drawable.ic_dialog_alert)
                     .create();

             alertDialog.getwindow().setType(WindowManager.LayoutParams.TYPE_SYstem_ALERT);
             alertDialog.show();
         }                      else {
             Intent intent = new Intent(this,PackageService.class);
             startService(intent);
             finish();
         }
     }else
     {
         Intent intent = new Intent(this,PackageService.class);
         startService(intent);
         finish();
     }
 }

代码将向用户显示一个警告对话框,该对话框需要使用“使用权限”权限,并将用户带到可以启用它的设置屏幕.

一切都与此完美配合.我唯一想要的是认情况下如何给予我的应用程序使用权限访问权限,而不会向用户显示任何对话框,直到他/她没有手动将其关闭

解决方法

您只需在清单上提供此权限,而忽略此权限错误

<使用的许可
机器人:名字= “android.permission.PACKAGE_USAGE_STATS”
工具:忽略= “ProtectedPermissions”/>

使用以下代码进行许可

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (!isAccessGranted()) {
        Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
        startActivity(intent);
    }
}


private boolean isAccessGranted() {
        try {
            PackageManager packageManager = getPackageManager();
            ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(),0);
            AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
            int mode = 0;
            if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.KITKAT) {
                mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,applicationInfo.uid,applicationInfo.packageName);
            }
            return (mode == AppOpsManager.MODE_ALLOWED);

        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }

原文地址:https://www.jb51.cc/android/316008.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐