我正在编写一个从网址下载* .apk的应用,然后尝试安装它。 在尝试让PackageManager安装时,我似乎遇到了Permission denied错误。 我想将文件的权限设置为可从java代码中读取。你是怎么做到的。
以下是我阅读文件的方式
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(PATH + fileName);
byte data[] = new byte[1024];
int count;
while((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}
答案 0 :(得分:2)
您无法使用PackageManager
直接安装.apk文件。只有系统应用程序才能这样做。
但您可以要求系统使用标准安装工作流程安装应用程序。这是一个例子:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(new File(pathToApk));
intent.setDataAndType(uri, "application/vnd.android.package-archive");
startActivity(intent);
这一切都假设您实际上已成功下载.apk
。但如果您在该步骤失败,则应检查WRITE_EXTERNAL_STORAGE权限。并检查您的SD卡是否未通过USB共享(如果是,您的应用程序将无权使用SD卡)。
答案 1 :(得分:1)
如果你想在Android 2.2及更高版本上更改文件权限,你可以使用它:
Runtime.getRuntime().exec("chmod 777 " + PATH + fileName);
在android 3中你也可以不使用本机代码解决方法:
new java.io.File(PATH + fileName).setReadable(true, false);
答案 2 :(得分:0)
我还没有尝试过这里要求的内容,但这会改变任何版本的android中的文件权限:
exec("chmod 0777 " + fileOfInterest.getAbsolutePath()); //whatever permissions you require
private void exec(String command) {
Runtime runtime = Runtime.getRuntime();
Process process;
try {
process = runtime.exec(command);
try {
String str;
process.waitFor();
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while ((str = stdError.readLine()) != null) {
Log.e("Exec",str);
mErrOcc = true; //I use this elsewhere to determine if an error was encountered
}
process.getInputStream().close();
process.getOutputStream().close();
process.getErrorStream().close();
} catch (InterruptedException e) {
mErrOcc = true;
}
} catch (IOException e1) {
mErrOcc = true;
}
}
这就像Shmuel所暗示的那样,但是更完整和顺便说一下,他建议的是1.5和更高,而不是2.2和更高。