TShopping

 找回密碼
 註冊
搜索
查看: 1373|回復: 0

[教學] Android中PackageManager類的簡單介紹

[複製鏈接]
發表於 2018-6-12 23:47:39 | 顯示全部樓層 |閱讀模式
 
Push to Facebook
1.PNG
1.PackageManager這個類,表層意思是包管理者,既然可以管理包,那麼包下的一些東西便可以獲取,其中可以獲取應用圖標和應用名稱以及包名。

    通過下面一行代碼實例化PackageManager類:

  1. PackageManager manager = getPackageManager(); //實例化PackageMangager  
複製代碼


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


  1. PackageInfo info = manager.getPackageInfo(getPackageName(), 0);//獲得包的信息  
複製代碼

獲得PackageInfo對像後,可以獲得相應的信息,而這些信息有點對應於AndroidManifest.xml文件下的各個屬性和標記,貌似可以通通獲得,不信你看下面的代碼:

首先,先附上一個新建項目後所生成的AndroidManifest.xml文件:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.example.androidtest"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="19" />  
  10.   
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/AppTheme">  
  16.         <activity  
  17.             android:name="com.example.androidtest.MainActivity"  
  18.             android:label="@string/app_name"  
  19.             android:icon="@drawable/app" >  
  20.             <intent-filter>  
  21.                 <action android:name="android.intent.action.MAIN" />  
  22.   
  23.                 <category android:name="android.intent.category.LAUNCHER" />  
  24.             </intent-filter>  
  25.         </activity>  
  26.     </application>  
  27. </manifest>
複製代碼


在這個xml文件中,有versionCode和versionName這兩個相關內容,可以通過下面的代碼獲取:

  1. int versioncode=info.versionCode; //獲得版本碼  
  2. String versionname=info.versionName; //獲得版本號  
複製代碼

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


  1. String permission=permissionInfos.toString();  
  2. ApplicationInfo applicationInfo=info.applicationInfo; //獲得應用程序應用  
  3. ProviderInfo[] providerInfo=info.providers; //獲得供應商  
  4. ActivityInfo[] activityInfo=info.activities; //獲得活動  
  5. activityInfo=info.receivers; //獲得接收器  
  6. ServiceInfo[] serviceInfo=info.services; //獲得服務  
複製代碼

其中獲得ApplicationInfo的應用信息類的對像後,還可以獲得該應用的圖標,名稱,類名等等:

  1. ApplicationInfo applicationInfo=info.applicationInfo; //獲得應用程序應用  
  2. int icon=applicationInfo.icon;//獲取應用圖標  
  3. String classname=applicationInfo.className; //獲得類名  
複製代碼


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


  1. List<PackageInfo> packageInfos = getPackageManager().getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
複製代碼

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


  1. tv.setText(packageInfos.get(position).applicationInfo.loadLabel(getPackageManager())); //獲取應用名稱  
  2. iv.setImageDrawable(packageInfos.get(position).applicationInfo.loadIcon(getPackageManager())); //獲取應用圖標  
複製代碼

完整代碼是:

  1. class GridViewAdapter extends BaseAdapter {  
  2.       
  3.     LayoutInflater inflater;  
  4.   
  5.     public GridViewAdapter(Context context) {  
  6.         inflater = LayoutInflater.from(context);  
  7.     }  
  8.     @Override  
  9.     public int getCount() {  
  10.         // TODO Auto-generated method stub  
  11.         return packageInfos.size();  
  12.     }  
  13.   
  14.     @Override  
  15.     public Object getItem(int arg0) {  
  16.         // TODO Auto-generated method stub  
  17.         return packageInfos.get(arg0);  
  18.     }  
  19.   
  20.     @Override  
  21.     public long getItemId(int position) {  
  22.         // TODO Auto-generated method stub  
  23.         return position;  
  24.     }  
  25.   
  26.     @Override  
  27.     public View getView(int position, View convertView, ViewGroup parent) {  
  28.         View view = inflater.inflate(R.layout.gv_item, null);  
  29.         TextView tv = (TextView) view.findViewById(R.id.gv_item_appname);  
  30.         ImageView iv = (ImageView) view.findViewById(R.id.gv_item_icon);  
  31.         //tv2.setText(packageInfos.get(position).packageName);  
  32.         tv.setText(packageInfos.get(position).applicationInfo.loadLabel(getPackageManager())); //獲取應用名稱
  33.         iv.setImageDrawable(packageInfos.get(position).applicationInfo.loadIcon(getPackageManager()));//獲取應用圖標
  34.         return view;  
  35.     }  
  36. }  
複製代碼


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



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

文章出處

 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-3-19 12:52 , Processed in 0.103637 second(s), 26 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表