【问题标题】:Parsing Error on downloading and running an .apk file下载和运行 .apk 文件时出现解析错误
【发布时间】:2016-02-14 21:03:01
【问题描述】:

我的应用中有一项功能允许用户下载新版本。
但我的问题是当我启动应该启动安装过程的意图时,会出现一条消息:

解析错误。解析包时出现问题

这是我的代码

Button button;
String urlApp = "example.com/app.apk"
String fileName = "app.apk";
DownloadManager downloadManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            File file = new File(Environment.DIRECTORY_DOWNLOADS, fileName);
            if (file.exists()){
                boolean deleted = file.delete();
                Toast.makeText(getApplicationContext(), "Deleted", Toast.LENGTH_SHORT).show();
            }

            downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(urlApp));
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setTitle("Click to update");
            downloadManager.enqueue(request);
            registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

        }
    });

}

private void openFile() {
    Intent install = new Intent(Intent.ACTION_VIEW);
    install.setDataAndType(Uri.fromFile(new File(Environment.DIRECTORY_DOWNLOADS+"/"+fileName)),
            "application/vnd.android.package-archive");
    startActivity(install);
}

BroadcastReceiver onComplete = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        openFile();
    }
};

}

仅适用于 .apk 文件,.txt 文件可以正常工作。 logcat 上也没有错误。 删除也不起作用,但这不是我的主要问题。

提前致谢:D

对不起,如果这是一个愚蠢的问题,但这是我第一次使用下载管理器

【问题讨论】:

  • 这太奇怪了... Google Play 商店会为您处理更新。那么,为什么要使用不同的、自定义的、不可靠的方法呢?
  • 当然可以,但我想自己做
  • 当然这会是一个很好的练习。但如果您想提高工作效率,那也是浪费时间!
  • 我这样做只是为了好玩,所以我不太关注生产力

标签: java android android-intent android-download-manager download-manager


【解决方案1】:

好的,我终于解决了

代替:

install.setDataAndType(Uri.fromFile(new File(Environment.DIRECTORY_DOWNLOADS+"/"+fileName)),
        "application/vnd.android.package-archive");

我用过

    install.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/"+fileName)),
            "application/vnd.android.package-archive");

【讨论】:

  • 我遇到了与您 OP 相同的错误。但是这个答案并没有真正帮助,因为在较新版本的 Android 中,您不能使用 getExternalStorage... 方法。看到这个:stackoverflow.com/a/40936215/2583765.
【解决方案2】:

我之前也遇到过同样的问题。

请检查您的新应用程序版本的最低 API 级别和您正在使用的设备的 API 级别。

【讨论】:

  • minSdkVersion 是 19,targetSdkVersion 是 23,我的设备也是 skdVersion 23
猜你喜欢
  • 2012-06-23
  • 2013-12-09
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多