如何通過Intent啟動一個已經安裝好的APP
阿新 • • 發佈:2018-11-01
首先你需要一個工具來提取APK的包名,我們要用到的工具是APK helper 該工具將APK安裝包拖到窗體上後,便可顯示APK的包名等詳細資訊。
得到包名以後 用以下程式碼,即可
private void doStartApplicationWithPackageName(String packagename) { // 通過包名獲取此APP詳細資訊,包括Activities、services、versioncode、name等等 PackageInfo packageinfo = null; try { packageinfo = getPackageManager().getPackageInfo(packagename, 0); } catch (NameNotFoundException e) { e.printStackTrace(); Builder builder = new Builder(this); builder.setTitle("提示"); builder.setMessage("找不到印表機應用,是否現在安裝"); builder.setNegativeButton("取消", null); builder.setPositiveButton("確定", new OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub File file = null; try { file = Util.getAPKfile(Photo2Activity.this); Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); startActivity(intent); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); builder.show(); } if (packageinfo == null) { return; } // 建立一個類別為CATEGORY_LAUNCHER的該包名的Intent Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(packageinfo.packageName); // 通過getPackageManager()的queryIntentActivities方法遍歷 List<ResolveInfo> resolveinfoList = getPackageManager() .queryIntentActivities(resolveIntent, 0); ResolveInfo resolveinfo = resolveinfoList.iterator().next(); if (resolveinfo != null) { // packagename = 引數packname String packageName = resolveinfo.activityInfo.packageName; // 這個就是我們要找的該APP的LAUNCHER的Activity[組織形式:packagename.mainActivityname] String className = resolveinfo.activityInfo.name; // LAUNCHER Intent Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); // 設定ComponentName引數1:packagename引數2:MainActivity路徑 ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); startActivity(intent); } }
若第一次啟動沒有安裝該APP,可將該APK包放到res/raw目錄下,通過
public static File getAPKfile(Context context) throws IOException { File file = new File(getTempPicFolder(), Contants.tempAPK); if (!file.exists()) { file.createNewFile(); } InputStream is = context.getResources().openRawResource(R.raw.print2); FileOutputStream fos = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len = -1; while ((len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); } return file; }
並通過
file = Util.getAPKfile(Photo2Activity.this);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
startActivity(intent);
<span style="text-align: center; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">啟動一個安裝程式,安裝該APK包</span>