【问题标题】:How to get the icon for an Android permission?如何获取 Android 权限的图标?
【发布时间】:2015-08-25 13:55:23
【问题描述】:

<permission><permission-group> 的 XML 规范指的是您在设置 | 中看到的图标。应用信息 |权限。

如果我已经在查询 PackageInfo 的字符串中获得了应用程序所需的权限,例如“android.permission.INTERNET”,我如何获得相关的权限和权限组图标?

【问题讨论】:

    标签: android permissions


    【解决方案1】:

    这是我的代码。

    package sample.com.sample_android;
    
    import android.Manifest;
    import android.content.pm.PackageManager;
    import android.content.pm.PermissionGroupInfo;
    import android.content.pm.PermissionInfo;
    import android.content.res.Resources;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
        private static final String ANDROID = "android";
        private PackageManager mPackageManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mPackageManager = getPackageManager();
    
            String permission = Manifest.permission.INTERNET;
    
            Drawable drawable = getPermissionDrawable(permission);
            ImageView imageView  = (ImageView) findViewById(R.id.image);
            imageView.setImageDrawable(drawable);
    
            TextView textView = (TextView) findViewById(R.id.text);
            textView.setText(permission);
        }
    
        @Nullable
        private Drawable getPermissionDrawable(String permission) {
            Drawable drawable = null;
            try {
                PermissionInfo permissionInfo = mPackageManager.getPermissionInfo(permission, 0);
                PermissionGroupInfo groupInfo = mPackageManager.getPermissionGroupInfo(permissionInfo.group, 0);
                drawable = mPackageManager.getResourcesForApplication(ANDROID).getDrawable(groupInfo.icon);
            } catch (PackageManager.NameNotFoundException|Resources.NotFoundException e) {
            }
            return drawable;
        }
    }
    

    【讨论】:

      【解决方案2】:

      据此,以下方法应该有效: http://developer.android.com/reference/android/content/pm/PackageManager.html

      PackageManager pm = context.getPackageManager();
      PermissionInfo info = pm.getPermissionInfo("PERMISSION_NAME", OPTIONAL_FLAGS);
      int drawableResource = info.icon;
      

      PackageManager 中还有一个名为getPermissionGroupInfo 的方法。

      【讨论】:

      • icon 始终为 0。OPTIONAL_FLAGS 的值是多少?
      • 只需检查文档并根据您的需要填写OPTIONAL_FLAG
      • 您使用了哪个值?我使用了 GET_META_DATA,因为 the documentation 说:“使用 GET_META_DATA 检索与权限相关的任何元数据。”图标为 0
      • 是的,我用的是同一个。您尝试获取图标的权限是什么?还要注意 Android 6 使用的权限系统与以前的 android 版本不同。
      • 是的,我需要图标来获得我的应用在 Android 6 中所需的一些权限。明天让我解决问题。现在是晚上 11 点。现在在我的时区
      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 2020-12-17
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2012-06-12
      相关资源
      最近更新 更多