Java 如何授予应用程序清单权限?如何在Android上以编程方式完成?

Java 如何授予应用程序清单权限?如何在Android上以编程方式完成?,java,android,permissions,Java,Android,Permissions,我用过这个 我尝试了此代码,但不起作用: PACKAGE_NAME=context.getApplicationContext().getPackageName() 但这帮不了我。我有申请表,我想获得他们每个人的许可。 我怎么办 更新: 就像这张照片一样,当点击“دستسیها”时,我想获得在该应用程序中使用的权限。(例如,在电报中:互联网、存储、呼叫、相机……) 更新2: class AppViewHolder extends RecyclerView.ViewHolder implemen

我用过这个

我尝试了此代码,但不起作用:

PACKAGE_NAME=context.getApplicationContext().getPackageName()

但这帮不了我。我有申请表,我想获得他们每个人的许可。 我怎么办

更新: 就像这张照片一样,当点击“دستسیها”时,我想获得在该应用程序中使用的权限。(例如,在电报中:互联网、存储、呼叫、相机……)

更新2:

class AppViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {



    AppViewHolder(View itemView, Context context, List<App> apps) {
      super(itemView);
      txt_show_permission = itemView.findViewById(R.id.txt_show_permission);



      /*The String Buffer For Permissions*/
      appNameAndPermissions = new StringBuffer();
      PackageManager pm = context.getPackageManager();
      List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
      for (ApplicationInfo applicationInfo : packages) {
        Log.d(TAG, "App: " + applicationInfo.name + " Package: " + applicationInfo.packageName);

        PackageInfo packageInfo = null;
        try {
          packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
          appNameAndPermissions.append(packageInfo.packageName + "*******:\n");


          //Get Permissions
          requestedPermissions = packageInfo.requestedPermissions;

          if (requestedPermissions != null) {
            for (int i = 0; i < requestedPermissions.length; i++) {
              Log.d(TAG, requestedPermissions[i]);
              appNameAndPermissions.append(requestedPermissions[i] + "\n");
            }

            appNameAndPermissions.append("\n");
          }

        } catch (PackageManager.NameNotFoundException e) {
          e.printStackTrace();
        }


      }
    }
我将为我的问题共享适配器代码

我的适配器:

class AppViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {



    AppViewHolder(View itemView, Context context, List<App> apps) {
      super(itemView);
      txt_show_permission = itemView.findViewById(R.id.txt_show_permission);



      /*The String Buffer For Permissions*/
      appNameAndPermissions = new StringBuffer();
      PackageManager pm = context.getPackageManager();
      List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
      for (ApplicationInfo applicationInfo : packages) {
        Log.d(TAG, "App: " + applicationInfo.name + " Package: " + applicationInfo.packageName);

        PackageInfo packageInfo = null;
        try {
          packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
          appNameAndPermissions.append(packageInfo.packageName + "*******:\n");


          //Get Permissions
          requestedPermissions = packageInfo.requestedPermissions;

          if (requestedPermissions != null) {
            for (int i = 0; i < requestedPermissions.length; i++) {
              Log.d(TAG, requestedPermissions[i]);
              appNameAndPermissions.append(requestedPermissions[i] + "\n");
            }

            appNameAndPermissions.append("\n");
          }

        } catch (PackageManager.NameNotFoundException e) {
          e.printStackTrace();
        }


      }
    }

适配器类中对话框的方法:

 public void showDialog(String txtPermission) {
    final Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(false);
    dialog.setContentView(R.layout.show_permission_dialog);

    TextView txt_permission = dialog.findViewById(R.id.txt_permission);
    Button btn_ok = dialog.findViewById(R.id.btn_ok);
    txt_permission.setText(txtPermission);

    btn_ok.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        dialog.dismiss();
      }
    });
    dialog.show();

  }
  • 您可以循环浏览所有应用程序名称,获取它们的权限,并将它们存储在字符串缓冲区中,如下所示:

  • 或者,由于您希望在单击按钮时显示权限,您可以在OnButtonClickListener中为每个应用程序添加您使用正确的应用程序名称尝试过的代码

  • 或者,您可以从每次单击按钮之前创建的StringBuffer中提取相关权限
  • 编辑:有关如何为“回收器”视图创建
    OnItemClickListener
    ,请参见以下链接。您可以获取单击的行的位置,并通过该行获取应用程序名称,您可以将其传递给另一个函数。然后在该函数中编写代码,以获取传递的应用程序名称的权限并显示它

    编辑2: 您需要从字符串缓冲区提取某个应用程序的权限,而不是将
    appnameandpowpermissions
    传递给包含整个列表的
    showDialog
    。以下是方法:

         String app_name = itemView.findViewById(R.id.app_name_text_view).getText().toString();
    int indexOfApp = appNameAndPermissions.indexOf(app_name);
    int indexOfLastPermission = appNameAndPermissions.indexOf("\n", indexOfApp);
    String permissions = appNameAndPermissions.substring(indexOfApp, indexOfLastPermission);
    

    从你的问题中不太清楚问题是什么。获取应用程序在其清单中列出的所有权限的列表。那么,问题是您无法获得所有已安装应用程序的列表吗?(“我可以得到应用程序包名”似乎与此相矛盾)。同时,请以合理的方式写下你的问题;不要随意将单词大写(阅读文本时会分心)。好的,我编辑它…我想获得我点击的每个应用的权限你想获得你点击的每个应用的权限,对吗?那么,您在链接中面临的解决方案问题是什么?也请张贴任何代码,你有written@KunjMehta不,我想在单击每个应用程序时,我将获得此应用程序中使用的权限。我在该链接上编写了代码,但对我无效。请查看更新问题。我添加了照片谢谢,我使用了这个链接,但没有为我工作。你能给我解释一下吗?该权限
    已被否决!您得到的错误是什么?我对它进行了测试,StringBuffer部分对我来说运行良好,即使没有GET_TASKS许可。您需要帮助转换为字符串吗?您是如何实现上述布局的?您是否使用过ListView或任何其他视图,或者一直在逐个添加按钮和图像?我将根据您的编辑分享代码。在Github或net上搜索RecyclerView的itemClickListeners,您将获得许多实现。使用任何。首先,我假设txt_show_权限是您的按钮,您不需要使用StringBuffer。其次,必须确保在onBindViewHolder中设置OnClickListener,而不是在创建适配器实例的位置。第三,您必须循环访问requestedPermissions数组。第四,我希望您能分享全部相关代码,这样我就可以了解上下文、流和变量名
         String app_name = itemView.findViewById(R.id.app_name_text_view).getText().toString();
    int indexOfApp = appNameAndPermissions.indexOf(app_name);
    int indexOfLastPermission = appNameAndPermissions.indexOf("\n", indexOfApp);
    String permissions = appNameAndPermissions.substring(indexOfApp, indexOfLastPermission);