android机身存储读写权限问题

chang74 2010-09-09 01:54:43
要做一个自动更新功能,我需要下载一个APK包,然后调用系统的安装来安装这个APK,就是自己下载自己然后安装自己。
我把APK下载到SD卡里,一切相安无事,可以顺利进行
但是我要是把APK下载到机身存储空间,就有问题了

1. 下载到/data/data/xx.xx.xx/files 目录下 可以下载成功,但是安装的时候会提示解析包错误。
2. 下载到/system或者/cache,文件创建不成功,好像是权限问题。

请问我怎么才能在机身存储来完成自动更新功能,因为不能强迫别人去插一张SD才能用。

我调用系统安装的代码:
String tPath = downLoadFilePath;
File mainFile = new File(tPath);
if (mainFile.exists()) {
Uri data = Uri.fromFile(mainFile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(data,
"application/vnd.android.package-archive");
startActivity(intent);
}

下载文件后存储:
File tFile = new File(saveFilePath); //saveFilePath可以是SD卡耶可以是机身存储。
if(tFile.exists())
{
tFile.delete();
}
if(!tFile.exists())
{
FileOutputStream fos = new FileOutputStream(tFile);
fos.write(saveBuffer);
fos.flush();
fos.close();
if(tFile.exists())
{
return tFile;
}
}

求解答,谢谢了。
...全文
12783 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
emessager 2011-11-04
  • 打赏
  • 举报
回复
我不知道我下载到本身这个安装包下面/data/data/xx.xx.xx/files下 ,启动系统安装这个apk时,是不是会先会把这个本省这个包下面的文件内容删除掉,我拷贝出来,再安装进去是可以的
emessager 2011-11-04
  • 打赏
  • 举报
回复
哥们,我现在运到和你一样的问题,但是我这只能获取apk的-rwxrexrwx权限,不能向apk上层文件夹那样获取drwxrexrwx这个最高权限,所以我现在apk下载后还老是报解析错误,急切求哥们帮助解决
JLJ19870913 2011-08-04
  • 打赏
  • 举报
回复
草,非要回复
jiangyongnian199 2011-07-08
  • 打赏
  • 举报
回复
学习下
华夏鹰 2011-05-25
  • 打赏
  • 举报
回复
谢谢楼主 学习了
wings4ever 2011-05-24
  • 打赏
  • 举报
回复
小白来请教一下楼主

我添加了如下权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<uses-permission android:name="android.permission.READ_OWNER_DATA"></uses-permission>
<uses-permission android:name="android.permission.WRITE_OWNER_DATA"></uses-permission>


希望可以在/data/data/PKG NAME/files 路径下创建并写入文件

我用的是JNI+C++ 代码如下
FILE* file = fopen("/data/data/com.test.w4e/files/Hello.txt","rw");
if (file != NULL)
{
LOGI("ready to write file");
fputs("HELLO WORLD!\n", file);
fflush(file);
fclose(file);
}


但是 目前只能实现对已存在文件进行读写 如果文件不存在的话 是不能创建的

求指点啊
ArashmenZhu 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhaozhiqiang1981 的回复:]
<uses-permission android:name="android.permission.INTERNET"/>
通常是这一句。
[/Quote]

你亮了,这个可以修改权限我膜拜了
download821106 2010-09-14
  • 打赏
  • 举报
回复
知道就多说点,不知道的就好好听好好学,
分不是这么赚的!
download821106 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhaozhiqiang1981 的回复:]
<uses-permission android:name="android.permission.INTERNET"/>
通常是这一句。
[/Quote]

坚决鄙視你這種人..
chang74 2010-09-10
  • 打赏
  • 举报
回复
可是我不明白 當前APP怎麼會有權限去調用RUNTIME來修改權限呢...
chang74 2010-09-10
  • 打赏
  • 举报
回复
解決了 多謝各位

只能修改文件權限了。
String command = "chmod 777 " + tFile.getAbsolutePath();
Runtime runtime = Runtime.getRuntime();
runtime.exec(command);
ameyume 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 panxq0809 的回复:]
是权限的问题,比如该程序的 APP_id 是 25 ,那么使用该程序下载的新的apk文件是属于 25 ,它的权限也只是可读。
而在安装之前系统会把该程序给删除,安装的时候,一方面系统的安装程序 APP_id 跟下载的apk文件的不一样,另一方面下载的apk文件的权限也是只读。所以就会出现无法解析文件。

解决方法,
1.系统以及原来程序的 APP_id 我们是没有办法更改的,但我们可以去更……
[/Quote]
UP
看来有sd卡就下载到sd卡上,没有sd卡再执行方法1的操作比较好。
panxq0809 2010-09-10
  • 打赏
  • 举报
回复
是权限的问题,比如该程序的 APP_id 是 25 ,那么使用该程序下载的新的apk文件是属于 25 ,它的权限也只是可读。
而在安装之前系统会把该程序给删除,安装的时候,一方面系统的安装程序 APP_id 跟下载的apk文件的不一样,另一方面下载的apk文件的权限也是只读。所以就会出现无法解析文件。

解决方法,
1.系统以及原来程序的 APP_id 我们是没有办法更改的,但我们可以去更改下载的文件的权限,给它设置成可读可写可操作的,就可以了。
2.就直接给下载到sdcard上,没有sdcard的话,就不让下载。

其他的方法待研究。。。。
chang74 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hero_cat 的回复:]

楼主能不能将log信息发出来看看呢?
[/Quote]

Parent directory of file is not writable
ameyume 2010-09-10
  • 打赏
  • 举报
回复
这是个问题,关注。
默认建立的文件是存在机身里的吧?
例如用SharedPreferences创建一个配置文件,会生成一个xml文件,这个文件默认是存在机身里的吧?
那这是怎么存储的?能不能有类似的做法?
chang74 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhaozhiqiang1981 的回复:]

<uses-permission android:name="android.permission.INTERNET"/>
通常是这一句。
[/Quote]

鄙視你這種人..
zhaozhiqiang1981 2010-09-10
  • 打赏
  • 举报
回复
<uses-permission android:name="android.permission.INTERNET"/>
通常是这一句。
yihua0001 2010-09-09
  • 打赏
  • 举报
回复
下到/data/app不行吗?
Hero_Cat 2010-09-09
  • 打赏
  • 举报
回复
楼主能不能将log信息发出来看看呢?
chang74 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mars199 的回复:]

<uses-permission android:name="android.permission.INTERNET"/>
[/Quote]

楼上二位,我就是想问,你们看见我的权限列表了吗?
加载更多回复(3)
代码转载自:https://pan.quark.cn/s/a4b39357ea24 LA 1010 逻辑分析仪被视作一种效能卓越的数字信号分析设备,其核心功能在于对数字通信协议,例如I²C,进行检测与解构。本资源将集中阐述LA 1010的操作流程以及如何借助该设备对I²C协议的波形展开分析。 确保逻辑分析仪被正确地连接至目标系统是极为关键的环节。在运用LA 1010的过程中,必须将分析仪的通道0与通道1分别对应连接至目标装置的SCL(时钟)与SDA(数据)线路。务必保证连接的稳固性且无任何干扰因素,以此确保数据采集的精确度。 随后,需要设定采样参数。采样频率对于能否成功捕捉到信号具有决定性的作用。针对I²C协议,通常选用的采样频率范围介于100kHz到400kHz之间,这一范围的选择取决于实际应用场景中I²C总线的运行速度。然而,LA 1010所能达到的最高采样速率可能高达500MHz,因此需要根据具体需求进行相应的调整。此外,还必须精心挑选适配目标设备工作电压的电压等级,例如3.3V、5V或1.8V。 在软件操作层面,需要选取恰当的通道与协议种类,即I²C。一旦启动采样,逻辑分析仪便开始记录相关数据。软件界面通常会实时展示波形图,为观察与分析提供便利。 关于I²C协议波形的解读,我们可以遵循以下步骤: 1. 总线处于空闲状态时:SCL与SDA均维持在高电平位置,这表明总线当前未进行数据传输。 2. 传输起始信号:当SCL处于高电平期间,SDA线从高电平转换至低电平,此动作标志着数据传输的开始。 3. 地址、数据及应答的识别:在每一个SCL高电平脉冲的持续时间内,SDA线上的电平状态代表了数据位。地址与数据的传输均为双向过程,而读写标识则由SDA线上的电平来...

80,488

社区成员

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

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