天天看點

Android中PackageManager類的簡單介紹

1.PackageManager這個類,表層意思是包管理者,既然可以管理包,那麼包下的一些東西便可以擷取,其中可以擷取應用圖示和應用名稱以及包名。

    通過下面一行代碼執行個體化PackageManager類:

PackageManager manager = getPackageManager();//執行個體化PackageMangager
           

2.初始化PackageManage後,可以獲得PackageInfo這個類的對象,即包的相關資訊:

PackageInfo info = manager.getPackageInfo(getPackageName(), 0);//獲得包的資訊
           

獲得PackageInfo對象後,可以獲得相應的資訊,而這些資訊有點對應于AndroidManifest.xml檔案下的各個屬性和标記,貌似可以通通獲得,不信你看下面的代碼:

首先,先附上一個建立項目後所生成的AndroidManifest.xml檔案:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name="com.example.androidtest.MainActivity"
            android:label="@string/app_name"
            android:icon="@drawable/app" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
           

在這個xml檔案中,有versionCode和versionName這兩個相關内容,可以通過下面的代碼擷取:

int versioncode=info.versionCode;//獲得版本碼
String versionname=info.versionName;//獲得版本号
           

也可以獲得 permission權限,application應用,providers,activity,receiver,service服務等等:

String permission=permissionInfos.toString();
ApplicationInfo applicationInfo=info.applicationInfo;//獲得application應用
ProviderInfo[] providerInfo=info.providers;//獲得providers
ActivityInfo[] activityInfo=info.activities;//獲得activity
activityInfo=info.receivers;//獲得receiver
ServiceInfo[] serviceInfo=info.services;//獲得service
           

其中獲得ApplicationInfo的應用資訊類的對象後,還可以獲得該應用的圖示,名稱,類名等等:

ApplicationInfo applicationInfo=info.applicationInfo;//獲得application應用
int icon=applicationInfo.icon;//擷取應用圖示
String classname=applicationInfo.className;//獲得類名
           

3.以上獲得的隻不過是屬于該項目中的相關資訊,如果要獲得手機中所有已經安裝過的apk應用程式時,就應該用下面這行代碼:

List<PackageInfo> packageInfos = getPackageManager().getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
           

如果要設定文本和圖檔的話可以利用下面的代碼,其中position是一個int整型

tv.setText(packageInfos.get(position).applicationInfo.loadLabel(getPackageManager()));// 擷取應用名稱
iv.setImageDrawable(packageInfos.get(position).applicationInfo.loadIcon(getPackageManager()));// 擷取應用圖示
           

完整代碼是:

class GridViewAdapter extends BaseAdapter {
	
	LayoutInflater inflater;

	public GridViewAdapter(Context context) {
		inflater = LayoutInflater.from(context);
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return packageInfos.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return packageInfos.get(arg0);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		View view = inflater.inflate(R.layout.gv_item, null);
		TextView tv = (TextView) view.findViewById(R.id.gv_item_appname);
		ImageView iv = (ImageView) view.findViewById(R.id.gv_item_icon);
		//tv2.setText(packageInfos.get(position).packageName);
		tv.setText(packageInfos.get(position).applicationInfo.loadLabel(getPackageManager()));// 擷取應用名稱
		iv.setImageDrawable(packageInfos.get(position).applicationInfo.loadIcon(getPackageManager()));// 擷取應用圖示
		return view;
	}

}
           

要獲得相應的包名可以通過packageInfos.get(position).packageName,在Eclipse工具中可以利用提示來擷取相應的資訊,activity,service,permission等等都可以獲得。

4.以上就是對PackageManager類的簡單介紹,僅供大家學習參考,寫得不好,請見諒,如有錯誤請指出,謝謝!



繼續閱讀