BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #19905同步于 2015/1/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

【已解决】安卓 关于用代码实现安装apk

lkasdolka2
2015/1/30镜像同步11 回复
看了Ocean君的建议晚上又折腾了一会,发现自己犯了很愚蠢的错误。。 1.前面提到过 Environment.getExternalStorageDirectory()的结果是:/storage/emulated/0。早期的安卓(4.0-)手机内存储比较小,所以一般都加装了SD卡,所以getExternalStorageDirectory返回的是SD卡对应的存储目录;4.0+后,内存储逐渐扩大,多数手机都是8G甚至更大,高端机现在又64G了,所以不需要SD卡了,但是API要与之前的兼容,所以就在内存储中开辟一个目录作为getExternalStorageDirectory()的结果。 2.LZ的手机没有root,查看文件不是很方便,不能直接从磁盘打开读,之前做的时候用的小米助手。因为log得到getExternalStorageDirectory()的结果是/storage/emulated/0,于是就在文件管理里找啊找啊找,终于找到了一个类似的目录,LZ天真的认为这就是/storage/emulated/0: (上传图片只支持网页图片,好麻烦。。这就是一张说明我的手机有一个/storage/emulated/storage/emulated/0的文件夹) 但是怎么试放在这个目录下的文件都找不到。 3.试了很久之后发觉找的目录不对,又去搜了搜,要用FileExplorer啊,好吧,打开,fileexplorer,发现/storage/emulated/下边只有一个legacy文件夹。继续搜,发现结果/storage/emulated/0是一个指向/storage/emulated/legacy文件夹的软链接(linux 文件系统中的东西,有点像windows下边的快捷方式,两者指向同一个文件夹)。 4.好吧,然后把要安装的apk放在/storage/emulated/legacy/下边,再用之前的代码判断、跳转都OK了。 对了,LZ问题陈述有点偏差,应该是如何用代码实现apk的安装,不是root以后那种静默安装。 感谢各位的回复 最后吐槽下论坛为什么不支持上传本地图片 -------------------------------------------------------------- 网上搜了下,大多数建议的版本是这么做: [code] String str = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "app.apk"; File location = new File(str); Log.i("TAG","apk exists:"+location.exists()+",isFile:"+location.isFile()); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.fromFile(location), "application/vnd.android.package-archive"); startActivity(intent); [/code] 然后就得到了一个解析错误:“解析包时出现问题”。 1.手机红米note,MIUI 6(基于安卓4.4)。 2.Environment.getExternalStorageDirectory()的结果是:/storage/emulated/0,很多手机应该是mnt/sdcard。 3.上边location.exists()和location.isFile()的值都是false,挺奇怪的,但是我真的没有把apk放错地方啊。。。 4.换了几个apk试都是这样 5.添加了WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE的权限 求助各位大神,有没有什么想法或者建议,整了好久都没整出来啊。。。 (顺便问下,论坛插入代码片段怎么整的。。。忘记了)
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dss886机器人#1 · 2015/1/30
4.4的就是/storage/emulated/0,我的就是这样 getExternalStorageDirectory()就是根据不同的版本返回不同的路径的 至于为什么。。。。也许你没有加读取sd卡的权限? 【 在 lkasdolka2 (凫水小胖) 的大作中提到: 】 : 网上搜了下,大多数建议的版本是这么做: : [code] : String str = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "app.apk"; : ...................
lkasdolka2机器人#2 · 2015/1/30
【 在 dss886 的大作中提到: 】 : 4.4的就是/storage/emulated/0,我的就是这样 : getExternalStorageDirectory()就是根据不同的版本返回不同的路径的 : 至于为什么。。。。也许你没有加读取sd卡的权限? : ................... 读写都加了。。
ocean2706机器人#3 · 2015/2/4
自动安装要root权限的
lkasdolka2机器人#4 · 2015/2/5
【 在 ocean2706 的大作中提到: 】 : 自动安装要root权限的 就是实现像豌豆荚下载完安装那种的,也要root吗。。
ocean2706机器人#5 · 2015/2/5
那是我没说清楚,如果弹出安装界面的话不需要root权限,如果不弹界面静默安装的话是需要root权限的。豌豆荚好像是弹界面的吧,没怎么用过。 【 在 lkasdolka2 的大作中提到: 】 : : 就是实现像豌豆荚下载完安装那种的,也要root吗。。
lkasdolka2机器人#6 · 2015/2/5
嗯 同样感谢 【 在 ocean2706 (【安静的美男子】猫富贵,勿相喵~) 的大作中提到: 】 : 那是我没说清楚,如果弹出安装界面的话不需要root权限,如果不弹界面静默安装的话是需要root权限的。豌豆荚好像是弹界面的吧,没怎么用过。 通过『我邮2.0』发布
ocean2706机器人#7 · 2015/2/5
用小米3(mui6,4.4.4)测试了一下代码没有问题。log返回true。environment获得的路径是你选择的安装程序默认的路径。如果你有插tf卡,一般人都会选放到外置tf卡上,你看是不是放地方了
ocean2706机器人#8 · 2015/2/5
也可以用 listFiles()打印一下有没有app.apk判断一下,别认死理
lkasdolka2机器人#9 · 2015/2/5
【 在 ocean2706 的大作中提到: 】 : 也可以用 listFiles()打印一下有没有app.apk判断一下,别认死理 好哒~~