如何获取Android权限的图标?

7
XML规范中的<permission><permission-group>涉及到一个图标,你可以在设置 | 应用信息 | 权限中看到它。
如果我已经通过查询PackageInfo得到应用程序需要的权限字符串(例如"android.permission.INTERNET"),那么我如何获取相关的权限和权限组图标?
2个回答

4
这是我的代码。
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;
    }
}

enter image description here


2

1
图标始终为0。OPTIONAL_FLAGS的值是多少? - Maksim Dmitriev
只需查看文档并根据您的需求填写 OPTIONAL_FLAG - finki
你使用了哪个值?我使用了GET_META_DATA,因为文档上说,“使用GET_META_DATA来检索与权限相关的任何元数据。”而图标是0。 - Maksim Dmitriev
1
是的,我用的是同一个。您要获取哪个权限的图标?此外,请注意,Android 6 使用与先前 Android 版本不同的权限系统。 - finki
@MaksimDmitriev 你找到图标的解决方案了吗?对我来说它总是为0。 - Thomas Vos
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接