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;
}
}

求解答,谢谢了。
...全文
12672 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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)

80,471

社区成员

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

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