1. 程式人生 > >Android 判斷手機是否安裝指定的軟體,以及呼叫指定的軟體

Android 判斷手機是否安裝指定的軟體,以及呼叫指定的軟體

1、我們經常會需要判斷當前的手機是否安裝的某個apk,來給出提示。

    /**
     * 檢查手機上是否安裝了指定的軟體
     * @param context
     * @param packageName:應用包名
     * @return
     */
    public boolean isAvilible(Context context, String packageName){
        //獲取packagemanager
        final PackageManager packageManager = context.getPackageManager();
        //獲取所有已安裝程式的包資訊
        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
        //用於儲存所有已安裝程式的包名
        List<String> packageNames = new ArrayList<String>();
        //從pinfo中將包名字逐一取出,壓入pName list中
        if(packageInfos != null){
            for(int i = 0; i < packageInfos.size(); i++){
                String packName = packageInfos.get(i).packageName;
                packageNames.add(packName);
            }
        }
        //判斷packageNames中是否有目標程式的包名,有TRUE,沒有FALSE
        return packageNames.contains(packageName);
    } 

例如:需要判斷當前手機是否安裝百度地圖的時候,如果沒有安裝並給出符合使用者體驗的提示。

/**
     * 駕車導航
     */
    protected void startNavi(double startLat, double startLong, double endLat, double endLong, String startName, String endName) {
       if(isAvilible(WebActivity.this,"com.baidu.BaiduMap")) {
           try {
               RouteParaOption para = new RouteParaOption();
               para.endName(endName);
               para.endPoint(new LatLng(endLat, endLong));
               para.startName("我的位置");
               BaiduMapRoutePlan.openBaiduMapDrivingRoute(para,
                       CommonUtil.getContext());
           } catch (Exception e) {
               e.printStackTrace();
               showDialog();
           }
       }else {
           showDialog();
       }
    }

    /**
     * 提示未安裝百度地圖app或app版本過低
     */
    public void showDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("您尚未安裝百度地圖app或app版本過低,點選確認安裝?");
        builder.setTitle("提示");
        builder.setPositiveButton("確認", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                OpenClientUtil.getLatestBaiduMapApp(WebActivity.this);
            }
        });

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.create().show();
    }
2、呼叫指定的軟體
 Intent intent = this.getPackageManager().getLaunchIntentForPackage(
                       "com.demo.test");
  startActivityForResult(intent, REQUEST_CODE2);