java-如何授予应用程序清单权限?如何在Android上以编程方式进行操作?

前端之家收集整理的这篇文章主要介绍了java-如何授予应用程序清单权限?如何在Android上以编程方式进行操作? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我用这个Topic

我尝试此代码,但没有用:

PACKAGE_NAME = context.getApplicationContext().getPackageName();

  1. try {
  2. pi = context.getPackageManager().getPackageInfo(PACKAGE_NAME,PackageManager.GET_PERMISSIONS);
  3. for (String perm : pi.requestedPermissions) {
  4. Log.e("Foo",perm);
  5. }
  6. } catch (Exception e) {
  7. }

但这不能帮助我.我有应用程序列表,我想获得在每个应用程序上使用的权限.
我该如何处理?

更新:
就像照片一样,当我单击“دسترسیها”时,我想获得该应用程序中使用的权限.(例如,电报中:Internet,存储,通话,摄像头…)

enter image description here

更新2:

我将分享我的问题的适配器代码

我的适配器:

  1. class AppViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
  2. AppViewHolder(View itemView,Context context,List<App> apps) {
  3. super(itemView);
  4. txt_show_permission = itemView.findViewById(R.id.txt_show_permission);
  5. /*The String Buffer For Permissions*/
  6. appNameAndPermissions = new StringBuffer();
  7. PackageManager pm = context.getPackageManager();
  8. List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_Meta_DATA);
  9. for (ApplicationInfo applicationInfo : packages) {
  10. Log.d(TAG,"App: " + applicationInfo.name + " Package: " + applicationInfo.packageName);
  11. PackageInfo packageInfo = null;
  12. try {
  13. packageInfo = pm.getPackageInfo(applicationInfo.packageName,PackageManager.GET_PERMISSIONS);
  14. appNameAndPermissions.append(packageInfo.packageName + "*******:\n");
  15. //Get Permissions
  16. requestedPermissions = packageInfo.requestedPermissions;
  17. if (requestedPermissions != null) {
  18. for (int i = 0; i < requestedPermissions.length; i++) {
  19. Log.d(TAG,requestedPermissions[i]);
  20. appNameAndPermissions.append(requestedPermissions[i] + "\n");
  21. }
  22. appNameAndPermissions.append("\n");
  23. }
  24. } catch (PackageManager.NameNotFoundException e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }

在onBindViewHolder中的txt_show_permission上设置点击监听器:

  1. holder.txt_show_permission.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. showDialog(String.valueOf(appNameAndPermissions));
  5. }
  6. });

适配器类中对话框的方法

  1. public void showDialog(String txtPermission) {
  2. final Dialog dialog = new Dialog(context);
  3. dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  4. dialog.setCancelable(false);
  5. dialog.setContentView(R.layout.show_permission_dialog);
  6. TextView txt_permission = dialog.findViewById(R.id.txt_permission);
  7. Button btn_ok = dialog.findViewById(R.id.btn_ok);
  8. txt_permission.setText(txtPermission);
  9. btn_ok.setOnClickListener(new View.OnClickListener() {
  10. @Override
  11. public void onClick(View v) {
  12. dialog.dismiss();
  13. }
  14. });
  15. dialog.show();
  16. }
最佳答案
>您可以遍历所有应用程序名称获取它们的权限,并将其存储在字符串缓冲区中,如下所示:
https://stackoverflow.com/a/14672557/10058326
>或者因为您希望在单击按钮时显示权限,所以可以在OnButtonClickListener中为每个应用添加使用正确的应用名称尝试过的代码
>或者您也可以从每次单击按钮时从先前获得的StringBuffer中提取相关权限

编辑:有关如何为Recycler View创建OnItemClickListener的信息,请参见这些链接.您可以获取被单击的行的位置,并通过该行获取该行中的应用名称,然后将其传递给另一个函数.然后在该函数中编写代码获取传递的应用名称的权限并显示
https://antonioleiva.com/recyclerview-listener/

https://hackernoon.com/android-recyclerview-onitemclicklistener-getadapterposition-a-better-way-3c789baab4db

https://gist.github.com/riyazMuhammad/1c7b1f9fa3065aa5a46f

编辑2:
无需将appNameAndPermissions传递给包含整个列表的showDialog,而是需要从字符串缓冲区中提取某个应用程序的权限.这是如何做:

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

猜你在找的Android相关文章