|
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; //獲得應用程序應用
- ProviderInfo[] providerInfo=info.providers; //獲得供應商
- ActivityInfo[] activityInfo=info.activities; //獲得活動
- activityInfo=info.receivers; //獲得接收器
- ServiceInfo[] serviceInfo=info.services; //獲得服務
複製代碼
其中獲得ApplicationInfo的應用信息類的對像後,還可以獲得該應用的圖標,名稱,類名等等:
- ApplicationInfo applicationInfo=info.applicationInfo; //獲得應用程序應用
- 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類的簡單介紹,僅供大家學習參考,寫得不好,請見諒,如有錯誤請指出,謝謝!
文章出處 |
|