Android系統應用開發(二)有條件的獲取所有app以及自定義

1.Android在一個APP中通過包名或類名啓動另一個APP

調用apk方法一:知道包名類名
  /**
* @exception :啓動apk
* @param :String  包名
* @param :String  類名
* **/
public void startActivity(String packageName,String  className){
 
Intent intent = new Intent(Intent.ACTION_MAIN);  
intent.addCategory(Intent.CATEGORY_LAUNCHER);              
ComponentName cn = new ComponentName(packageName, className);              
intent.setComponent(cn);  
startActivity(intent);  
 
}
 
調用apk方法二:只知道知道包名
  /**
* @exception :啓動apk
* @param :String  包名
* **/
public void startAPP(String appPackageName){  
       try{  
           Intent intent = this.getPackageManager().getLaunchIntentForPackage(appPackageName);  
           startActivity(intent);  
       }catch(Exception e){  
           Toast.makeText(this, "沒有安裝", Toast.LENGTH_LONG).show();  
       }  
   }  

同一個apk內部啓動另一個activity:
MainActivity:當前所在activity
SetActivity:要啓動的activity

Intent intent = new Intent(MainActivity.this,SetActivity.class);
startActivity(intent);

2.獲取設備上所有apk,及篩選,,改變圖標

 /**
 * @exception 獲取所有apk
 * @param Context
 * @retrun List<PackageInfo> 儲存所有app的列表
 * **/
public  List<PackageInfo> getAllApps(Context context) {
 
 List<PackageInfo> apps = new ArrayList<PackageInfo>();
       PackageManager pManager = context.getPackageManager();
       // 獲取手機內所有應用
       List<PackageInfo> packlist = pManager.getInstalledPackages(0);
       for (int i = 0; i < packlist.size(); i++) {
           PackageInfo pak = (PackageInfo) packlist.get(i);
          
             /*設置  瀏覽器 計算器 相機 ES文件瀏覽器 電視 本地影音 WPS  下載 音樂 系統apk篩選 */
           if ( pak.packageName.equals("com.android.settings") ||pak.packageName.equals("com.android.browser")
             ||pak.packageName.equals("com.android.calculator2") ||pak.packageName.equals("com.android.camera2")
             ||pak.packageName.equals("com.jrm.localmm")|| pak.packageName.equals("com.estrongs.android.pop")
             || pak.packageName.equals("com.mstar.tv.tvplayer.ui")|| pak.packageName.equals("cn.wps.moffice_eng")
             || pak.packageName.equals("com.android.providers.downloads.ui")|| pak.packageName.equals("com.android.music")

           
|| (pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
//pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0 非系統apk
             apps.add(pak);
           }
           // 判斷是否爲非系統預裝的應用程序
           // 這裏還可以添加系統自帶的,這裏就先不添加了,如果有需要可以自己添加
           // if()裏的值如果<=0則爲自己裝的程序,否則爲系統工程自帶
//            if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
//                // 添加自己已經安裝的應用程序
//                apps.add(pak);
//            }
       }
       return apps;

   }

/**
* @exception 獲取apk的圖標及改變圖標
* **/
public  List<AppsItemInfo> getData(){
        // 獲取圖片、應用名、包名
        pManager =this.getPackageManager();
        List<PackageInfo> appList = getAllApps(this);
 
        list = new ArrayList<AppsItemInfo>();
        for (int i = 0; i < appList.size(); i++) {
            PackageInfo pinfo = appList.get(i);
            AppsItemInfo shareItem = new AppsItemInfo();
            if (appList.get(i).packageName.equals("com.android.settings")) {
            // 設置圖片,根據包名替換apk圖標
shareItem.setIcon(getResources().getDrawable(R.drawable.settings));
}else {
  // 設置圖片
           shareItem.setIcon(pManager
                   .getApplicationIcon(pinfo.applicationInfo));
}
         
            // 設置應用程序名字
            shareItem.setLabel(pManager.getApplicationLabel(
                    pinfo.applicationInfo).toString());
            // 設置應用程序的包名
            shareItem.setPackageName(pinfo.applicationInfo.packageName);
            // 設置應用程序的類名
            shareItem.setClassName(pinfo.applicationInfo.className);
            list.add(shareItem);
        }  
        
        return list;
}
//存放apk信息的類
public class AppsItemInfo {


private Drawable icon; // 存放圖片
     private String label; // 存放應用程序名
     private String packageName; // 存放應用程序包名
     private String className; // 存放應用程序包名
     public int flag = 0;
     public static final int MOVE_FLAG = 1;
public static final int STATIC_FLAG = 0;
     
     public Drawable getIcon() {
         return icon;
     }


     public void setIcon(Drawable icon) {
         this.icon = icon;
     }


     public String getLabel() {
         return label;
     }


     public void setLabel(String label) {
         this.label = label;
     }


     public String getPackageName() {
         return packageName;
     }


     public void setPackageName(String packageName) {
         this.packageName = packageName;
     }


public String getClassName() {
return className;
}


public void setClassName(String className) {
this.className = className;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章