2015-08-25 41 views
6

<permission><permission-group>的XML规范引用了您在设置|应用程序信息|权限。如何获取Android权限的图标?

如果我已经有查询PackageInfo的字符串从一个应用程序需要的权限,例如“android.permission.INTERNET”,我如何获得关联的权限和权限组图标?

回答

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方法。

+0

你能共享一个例子吗?因为我测试过它并没有工作。 – Gorio

+0

图标始终为0. OPTIONAL_FLAGS的值是什么? –

+0

只需检查文档并根据需要填写“OPTIONAL_FLAG”。 – finki

2

这是我的代码。

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