能不能自动触发安装一个下载了的apk?

anneykingsmile 2016-02-29 08:00:18
如题, 能不能自动触发安装一个下载了的apk
...全文
347 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
anneykingsmile 2016-03-02
  • 打赏
  • 举报
回复
引用 15 楼 qq_18720507的回复:
[quote=引用 12 楼 wei220000的回复:]private void startApp(String packageName) { Intent intent = new Intent(); PackageManager packageManager = mcontext.getPackageManager(); intent = packageManager.getLaunchIntentForPackage(packageName); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP) ; mcontext.startActivity(intent); } 启动已安装的Apk。
那个包名指哪个包的包名啊?一个项目有好几个包的。[/quote] 可以了,谢谢大神哈。好人好运!
anneykingsmile 2016-03-01
  • 打赏
  • 举报
回复
引用 12 楼 wei220000的回复:
private void startApp(String packageName) { Intent intent = new Intent(); PackageManager packageManager = mcontext.getPackageManager(); intent = packageManager.getLaunchIntentForPackage(packageName); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP) ; mcontext.startActivity(intent); } 启动已安装的Apk。
那个包名指哪个包的包名啊?一个项目有好几个包的。
wei220000 2016-03-01
  • 打赏
  • 举报
回复
String[] args = { "pm", "install", "-r", apkAbsolutePath }; String result = ""; ProcessBuilder processBuilder = new ProcessBuilder(args); Process process = null; InputStream errIs = null; InputStream inIs = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int read = -1; process = processBuilder.start(); errIs = process.getErrorStream(); while ((read = errIs.read()) != -1) { baos.write(read); } baos.write('/n'); inIs = process.getInputStream(); while ((read = inIs.read()) != -1) { baos.write(read); } byte[] data = baos.toByteArray(); result = new String(data); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (errIs != null) { errIs.close(); } if (inIs != null) { inIs.close(); } } catch (IOException e) { e.printStackTrace(); } if (process != null) { process.destroy(); } } return result; 代码执行后,如果安装成功的话获取到的result值是“ pkg: /data/local/tmp/Calculator.apk /nSuccess”,如果是失败的话,则没有结尾的“Success”。 不过这时候会提示你的程序想要获取权限,所以你最好在程序第一次运行的时候就尝试去获取权限,这样在安装的时候就不会再次提示了。具体怎么获取权限就百度吧,大概就是执行一次adb shell,就能申请了。
anneykingsmile 2016-03-01
  • 打赏
  • 举报
回复
引用 4 楼 战国剑的回复:
自己设置一个标志位,如下载完成,然后做以下操作: /** * 安装一个应用程序 * @param context * @param apkfile */ public static void installApplication(Context context,File apkfile){ Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.setDataAndType(Uri.fromFile(apkfile), "application/vnd.android.package-archive"); context.startActivity(intent); } 如果要自动触发,可以考虑系统广播,比如开机广播、网络变化广播等。
这个还要点击“安装”的按钮吧?我的意思是从下载到安装,无人操作
anneykingsmile 2016-03-01
  • 打赏
  • 举报
回复
引用 5 楼 wei220000的回复:
你来控制下载吗?如果不是你自己控制,那你总得知道保存地址和文件名吧?你可以设置一个线程,无限循环的去查找这个apk,如果发现,就打开, Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); String type = getMIMEType(file); intent.setDataAndType(/*uri*/Uri.fromFile(file), type); mcontext.startActivity(intent); 如果是想静默安装的话,要用到adb shell,需要root权限的。
我可以root,大神赐教方法
anneykingsmile 2016-03-01
  • 打赏
  • 举报
回复
引用 4 楼 战国剑的回复:
自己设置一个标志位,如下载完成,然后做以下操作: /** * 安装一个应用程序 * @param context * @param apkfile */ public static void installApplication(Context context,File apkfile){ Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.setDataAndType(Uri.fromFile(apkfile), "application/vnd.android.package-archive"); context.startActivity(intent); } 如果要自动触发,可以考虑系统广播,比如开机广播、网络变化广播等。
这个还要点击“安装”的按钮吧?我的意思是从下载到安装,无人操作
网络咖啡 2016-03-01
  • 打赏
  • 举报
回复
安装界面调出比较容易,但是需要用户手动点击安装按钮才可以安装 静默安装需要root权限
wei220000 2016-03-01
  • 打赏
  • 举报
回复
最后,记得结贴哦
wei220000 2016-03-01
  • 打赏
  • 举报
回复
如果你不知道下载apk的包名,用下面的方法获取 PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES); if(info != null){ ApplicationInfo appInfo = info.applicationInfo; String appName = pm.getApplicationLabel(appInfo).toString(); String packageName = appInfo.packageName; //得到安装包名称 String version=info.versionName; //得到版本信息 // Toast.makeText(TestActivity.this, , Toast.LENGTH_LONG).show(); Drawable icon = pm.getApplicationIcon(appInfo);//得到图标信息 TextView tv = (TextView)findViewById(R.id.tv); tv.setText("appName:"+appName+"---packageName:"+packageName); //显示图标 ImageView tu=(ImageView)findViewById(R.id.imageView1); tu.setBackgroundDrawable(icon); }
wei220000 2016-03-01
  • 打赏
  • 举报
回复
private void startApp(String packageName) { Intent intent = new Intent(); PackageManager packageManager = mcontext.getPackageManager(); intent = packageManager.getLaunchIntentForPackage(packageName); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP) ; mcontext.startActivity(intent); } 启动已安装的Apk。
anneykingsmile 2016-03-01
  • 打赏
  • 举报
回复
引用 10 楼 wei220000的回复:
String[] args = { "pm", "install", "-r", apkAbsolutePath }; String result = ""; ProcessBuilder processBuilder = new ProcessBuilder(args); Process process = null; InputStream errIs = null; InputStream inIs = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int read = -1; process = processBuilder.start(); errIs = process.getErrorStream(); while ((read = errIs.read()) != -1) { baos.write(read); } baos.write('/n'); inIs = process.getInputStream(); while ((read = inIs.read()) != -1) { baos.write(read); } byte[] data = baos.toByteArray(); result = new String(data); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (errIs != null) { errIs.close(); } if (inIs != null) { inIs.close(); } } catch (IOException e) { e.printStackTrace(); } if (process != null) { process.destroy(); } } return result; 代码执行后,如果安装成功的话获取到的result值是“ pkg: /data/local/tmp/Calculator.apk /nSuccess”,如果是失败的话,则没有结尾的“Success”。 不过这时候会提示你的程序想要获取权限,所以你最好在程序第一次运行的时候就尝试去获取权限,这样在安装的时候就不会再次提示了。具体怎么获取权限就百度吧,大概就是执行一次adb shell,就能申请了。
我能把app做成系统应用了。现在能实现下载并自动安装了,但是安装完,不知怎么触发打开。
wei220000 2016-02-29
  • 打赏
  • 举报
回复
你来控制下载吗?如果不是你自己控制,那你总得知道保存地址和文件名吧?你可以设置一个线程,无限循环的去查找这个apk,如果发现,就打开, Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); String type = getMIMEType(file); intent.setDataAndType(/*uri*/Uri.fromFile(file), type); mcontext.startActivity(intent); 如果是想静默安装的话,要用到adb shell,需要root权限的。
战国剑 2016-02-29
  • 打赏
  • 举报
回复
自己设置一个标志位,如下载完成,然后做以下操作: /** * 安装一个应用程序 * @param context * @param apkfile */ public static void installApplication(Context context,File apkfile){ Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.setDataAndType(Uri.fromFile(apkfile), "application/vnd.android.package-archive"); context.startActivity(intent); } 如果要自动触发,可以考虑系统广播,比如开机广播、网络变化广播等。
anneykingsmile 2016-02-29
  • 打赏
  • 举报
回复
单机吗?大神快来快来…………
anneykingsmile 2016-02-29
  • 打赏
  • 举报
回复
有没有大神在线,赐教赐教
anneykingsmile 2016-02-29
  • 打赏
  • 举报
回复
我能够获取手机的权限(机器就在我手上)

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧