遇到一些问题,使用代码的结果是无法满足自己的需求,很多时候是和手机本身的的一些权限和机制有关系。

问题1:下载apk到 内部存储,安装时无法找到路径,提示:解析包时发生错误

这个原因就是由于权限的原因,首先内部存储,在权限的原因下,默认为私有,内部存储所以只能本应用自己调用。而安装应用是PackagesInstaller和PackageManager系统的其他部分调用,就等于是外部应用调用的,所以是无法成功的,由于我的需求就是把apk存放到内部存储的固定目录下。

首先,可以设置权限的调用内部存储的方法有两个(参考连接:http://aijiawang-126-com.iteye.com/blog/792931 )

一个openFIleInput(String name,int mode),第一个参数是文件名字,不能带有“/”,意思就是不能是路径,必须是文件名,第二个参数是模式。

还有就是getDir()方法getDir(String name, int mode),返回/data/data/youPackageName/下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹。

这个放在file下面好像是可以的。

然后就是使用android.app.ContextImpl.setFilePermissionsFromMode(String name,int mode,int extraPermissions);

还有就是android.os.FileUtils.setPermissions(String path, int mode, int uid, int gid);

这个两个类是系统内部类,在eclipse中编写,是无法正常调用的,因为你找不到包,最方便的方法就是利用反射。

大概发一个例子来简单总计下反射的使用,以及参数的含义。

public void setFilePathPermissions(String name, int mode,int extraPermissions) {Class<?> clazz;try {// 包名加类名clazz = Class.forName("android.app.ContextImpl");// 方法名Method method = clazz.getDeclaredMethod("setFilePermissionsFromMode", new Class[] { String.class,int.class, int.class });method.invoke(null, name, mode, extraPermissions);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}

首先Class.forName中的参数,是类的全名加上包名。

getDeclaredMethod方法中的第一个参数是方法名,第二个参数,是个参数数组,就比如setFilePermissionsFromMode方法有三个参数, 后面就追加三个参数,可以像上面那样写个数组,中间有三个元素,

clazz.getDeclaredMethod("setFilePermissionsFromMode", new Class[] { String.class,int.class, int.class });

也可以把数组显示去掉,如下

clazz.getDeclaredMethod("setFilePermissionsFromMode", String.class,int.class, int.class );

所需要反射的方法的参数有几个,就写几个,是什么类型,就调用类型.class的方法。记住,int和integer是不一样的。

method.invoke(null, name, mode, extraPermissions);其实也是两个参数模式,如果方法是static的话,第一个参数,就设置为null,否则写成clazz.newInstance(),

后面三个参数,本身和上面类型.class是一个意思,也是一个数组,这是就是直接写的方式,把三个参数传进来就ok了。

如果该方法没有返回值,你自己创建的方法名的返回值类型就写void就行了。

还有自己用模拟器测试的时候,可以用adb打开应用下包名的权限,必须是一级一级目录的打开。变成外部可读写的默认。

下面是用adb设置过程:

abd root

adb remount(成功会显示remount success)

adb shell(会变成root@android:/#)

cd data/data

ls(查看清单)

cd 目录(进入包名,进入各个文件夹)

ls -la  (会查看到下面的文件,权限信息也会显示)

cd .. (回退,和git一样)

chmod  -R  777 (要给权限的目录)

ls -la (查看就会发现权限改了)

ctrl +c (退出)

其实把apk下载到外部路径下是可以调用安装的。

还有我为了满足需求,采用的方法是,把文件下载到本地自定义目录,然后copy到外部路径,然后从外部路径调用安装,随后把它删除掉。

今天学了单例模式,到现在才明白。

想一直保存一个值,然后每次启动的时候,就会新建一个对象,然后调用的又是默认值,最后无法满足需求。

public class Contance {public boolean flag = true;private static Contance mInstance = null;public static Contance getInstance() {if (mInstance == null) {mInstance = new Contance();Log.i("test_pass", "new instance");}Log.i("test_pass", "mInstance");return mInstance;}
}

这是一个例子,所谓单例就是一个目的,所谓的单,就是只有一次,就是只新建一次对象,

当我调用flag的时候,不是每次都默认的true,我想改变起状态,并且保留这个值,这样就用到了单例模式。

我此时就这样写Contance.getInstance().flag;

在调用getInstance的时候,会传进来一个实例,判断这个实例是不是null,如果是空,就是没有创建过,此时就new。如果不是空, 说明已经new过了,就把当前的实例return,这样就只需要new一次,这就是单例模式。

还有Settings.system.putInt();在receiver是不能调用的,此时因为进程不是system进程,所以无法调用system的写方法,但是geiInt是可以调用的。

android:sharedUserId="android.uid.system"

此时还有adb命令,用于应用重启生效。先在手机上设置开发者模式,在开启adb调试,

然后adb中执行如下命令:

adb root

abd remount

adb push 应用路径 /system/app

adb reboot  (重启)

下载apk到本地,安装遇到的解析包时出现错误的分析相关推荐

  1. python3安装包是说解压数据出错怎么办_安装软件出现“解析包时出现错误”怎么办?...

    展开全部 总结:安装包损坏,重新搜索下载.手机e69da5e887aa3231313335323631343130323136353331333431373836内存不足,清理一下手机重新安装app版 ...

  2. 用java下载apk解析包出错_安装apk解析包时出现错误怎么办

    安装apk解析包时出现错误怎么办 安装apk解析包时出现错误怎么办相信许多使用Android智能手机的用户都会或多或少的遇到到这样的问题--"解析包时出现错误".那么遇到这样的问题 ...

  3. apk部分手机安装失败_安装apk解析包时出现错误怎么办?小编快速帮你解决

    Android智能手机的用户都会或多或少的遇到到这样的问题--"安装apk解析包时出现错误".那么遇到这样的问题该如何解决?其实导致apk程序安装失败的原因是多方面的,而这所有的错 ...

  4. matlab在sin处出现解析错误,破除“解析包时出现错误”方法大全,全部都在这了!...

    原标题:破除"解析包时出现错误"方法大全,全部都在这了! 相信许多使用Android设备的用户都会或多或少的遇到到这样的问题:解析包时出现错误.那么遇到这样的问题该如何解决? 其实 ...

  5. android之解析包时出现错误(二)

    为什么是二呢,之前遇到过一次了,详见http://blog.csdn.net/jason0539/article/details/12222173 这次的原因不同,再记录下 public class ...

  6. matlab在tic处出现解析错误,破除“解析包时出现错误”方法大全,全部都在这了!...

    原标题:破除"解析包时出现错误"方法大全,全部都在这了! 相信许多使用Android设备的用户都会或多或少的遇到到这样的问题:解析包时出现错误.那么遇到这样的问题该如何解决? 其实 ...

  7. 安装apk解析包时出现错误(应用内更新)

    最近遇到一个问题,有个别用户在应用内更新版本会出现解析包失败的情况,而且有的机型还是必现,浏览器下载就没问题,应用内就有问题,这就很让人费解,之前一直没关注过这种情况,但是用户就是上帝,有问题必须得解 ...

  8. 【Android开发】app升级报错,解析包时出现错误(华为手机8.0系统)

    问题描述: 今天发布app版本升级,碰到华为手机8.0系统,安装升级的时候提示,解析包时出现问题.而其他手机都是正常的.而且当我的包没有经过360加固的时候,也是可以去升级新版本,加固过后就不行了. ...

  9. Android7.1.1手机使用android studio开发时出现解析包时出现错误的问题

    在工作的时候,使用android studio开发,调试工具是android7.1.1手机vivo x20,遇到我每次不管run自己的项目,还是我新建一个Hello World的demo也都是不行.一 ...

最新文章

  1. MPB:地大郭东毅等-一种针对重金属污染土壤的高效DNA提取方法
  2. linux怎样优化桌面,简单优化设置Ubuntu 18.04系统的GNOME桌面
  3. 从 2017 OpenStack Days China 看国内云计算的发展现状
  4. git submodule 删除及更新URL
  5. LAMP 全功能编译安装 for CentOS6.3笔记(更新)
  6. 为什么要选择Apache Pulsar(二)
  7. 面向消费者的自动文本分析(Automated Text Analysis for Consumer Research) 2017 JCR 论文阅读
  8. java如何编译运行?
  9. apache自定义虚拟主机日志格式
  10. Linux在线升级ruby
  11. 牛客网算法题目-最优乘车题解
  12. 直播APP源码网络基础部分处理:
  13. 输入快递单号自动识别快递公司的方法
  14. 【无限互联】学员作品 豆果美食IOS客户端
  15. 明源售楼系统技术解析—诚意认购(一)
  16. 微信JSSDK invalid signature签名错误的解决方法
  17. 前端实现文件在线预览功能
  18. 【MATLAB】基础01
  19. Android 4.0 源代码结构
  20. 《ROS2机器人建模URDF》8.4控制移动机器人轮子运动

热门文章

  1. mysql不停机主从配置
  2. PHP书籍推荐TOP10排行榜
  3. UOS下的任务管理器 ---- 【系统监视器】
  4. Win及杀毒软件输入法豪杰注册序列号等
  5. Firefox 账号信息同步/登录问题
  6. IE兼容性问题处理( 对象不支持startsWith )
  7. 爆火交友一元脱单、盲盒、微信公众号制作【源码】
  8. 金边php,柬埔寨首都,不如中国县级市?金边与中国各大城市比一比
  9. Cordova项目IphoneX适配,结合BUI前端框架项目(需要修改原生代码)
  10. 手机界面设计中12种常用布局