从android内部内存中打开文件

时间:2012-10-25 08:58:18

标签: android android-intent

我使用以下代码在/data/data/com.abc.def/files/目录中写入数据。

InputStream input = new BufferedInputStream(url.openStream());
            FileOutputStream fos = openFileOutput(file_name, Context.MODE_WORLD_READABLE);
            byte data[] = new byte[1024];

            long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;
                    publishProgress(""+(int)((total*100)/lenghtOfFile));
                    fos.write(data, 0, count);
                }

                fos.flush();
                fos.close();
                input.close();
            } catch (Exception e) {}

使用以下代码通过意图打开文件。

File file = getDir(file_name, Context.MODE_WORLD_READABLE);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
            startActivity(intent);

但它会出现“解析包时出现问题

”这样的错误

enter image description here 请帮忙。 提前谢谢。

3 个答案:

答案 0 :(得分:0)

我的手机是运行Android 2.3.3版本的三星Galaxy S II,当我尝试安装软件包时,我收到错误“Parse Error”。我使用Android 3.2来制作这些软件包。

您正尝试在2.3.3设备上打开3.2应用程序。

解决方案

从清单文件中更改所需的API级别标记android:minSdkVersion

或删除所需的API级别标记android:minSdkVersion。

答案 1 :(得分:0)

您使用的API级别是多少?尝试使用8+(Froyo或以上)


修改

将此行添加到清单文件

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="15" />

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="15" />

这样你就可以编译得更高,并在较低版本中运行

答案 2 :(得分:0)

我解决了。

String fileName = "tmp.apk";
FileOutputStream fos = openFileOutput(fileName,
        MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE);

// write the .apk content here ... flush() and close()

// Now start the standard instalation window
File fileLocation = new File(context.getFilesDir(), fileName);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(fileLocation),
                       "application/vnd.android.package-archive");
context.startActivity(intent);