如何通过Intent启动一个已经安装好的APP

首先你需要一个工具来提取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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值