パッケージの権限一覧を表示

ExpandableListViewの練習がてら。
インストールされているパッケージの権限を表示するもの。
パッケージをタップすると、そのパッケージ内の権限を表示する。

public class ReadPermissionsActivity extends Activity{

	private final String PARENT = "package";
	private final String CHILD = "permission";
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ExpandableListView listView = (ExpandableListView) findViewById(R.id.list);
        List<Map<String, Object>> parentsList = new ArrayList<Map<String, Object>>();
        List<List<Map<String, Object>>> childrenList = new ArrayList<List<Map<String,Object>>>();
        
        PackageManager pm = getPackageManager();
        List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS);
        for(PackageInfo info : packages){
        	String[] permissions = info.requestedPermissions;
        	if(permissions != null){
                Map<String, Object> parentData = new HashMap<String, Object>();
                parentData.put(PARENT, info.packageName);
                parentsList.add(parentData);
                
                List<Map<String, Object>> childList = new ArrayList<Map<String,Object>>();
        		for(String permission : permissions){
        			Map<String, Object> childData = new HashMap<String, Object>();
        			childData.put(CHILD, permission);
        			childList.add(childData);
        		}
        		childrenList.add(childList);
        	}
        }
        
        SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
        		ReadPermissionsActivity.this, 
        		parentsList,
        		android.R.layout.simple_expandable_list_item_1,
        		new String[]{PARENT},
        		new int[]{android.R.id.text1},
        		childrenList,
        		R.layout.raw,
        		new String[]{CHILD},
        		new int[]{R.id.permission}
        	);
        
        listView.setAdapter(adapter);
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ExpandableListView android:id="@+id/list"
    	android:layout_height="fill_parent"
    	android:layout_width="fill_parent" />
</LinearLayout>

raw.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
    <TextView android:id="@+id/permission"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:layout_margin="5dp" />    
</LinearLayout>
Android, Programming

1 comment


コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>