为什么我下载后无法安装 .apk

Why cannot I install an .apk after downloading it

我制作了一个 Android 应用程序,并且制作了一个关于更新的功能。

我下载了一个 .apk 文件并使用 intent 安装 it.But 它总是出现类似 "there was a problem when parsing the package"

的错误

我的密码是

下载完成后我用接收器监听动作,代码是

private BroadcastReceiver mBroadcaseReceiver;
protected void onCreate(@Nullable Bundle savedInstanceState) {
mCheckUpdateBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("AboutUsActivity","check update");
            downloadApk();
        }
    });
mBroadcaseReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)){
                Log.d("aboutusactivity","下载完成");
                //下载完毕后安装
                installApk();
            }
        }
    };
    registerReceiver(mBroadcaseReceiver,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}


private void downloadApk() {
    Log.d("AboutusActivity","update");
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse("XXXXXX"));
    request.setDescription("updating");
    request.setTitle("title");
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        request.allowScanningByMediaScanner();
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    }
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "yuedong.apk");

    // 获得下载服务和队列文件
    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    manager.enqueue(request);
}

private void installApk() {
    Intent mIntent = new Intent(Intent.ACTION_VIEW);
    mIntent.setDataAndType(Uri.fromFile(new File(Environment.DIRECTORY_DOWNLOADS,"yuedong.apk")),
            "application/vnd.android.package-archive");
    this.startActivity(mIntent);
}

但它总是喜欢 那么我的代码有什么问题?

您下载的应用程序文件 .apk 可能已损坏。如果您尝试安装损坏的应用程序,您将收到解析错误 "There was a problem parsing the package"。所以,再次尝试完全下载应用程序并安装它。

可能是因为那个文件有私有模式保护(访问权限)。尝试this link。

我现在知道原因了 因为我下载 apk 的路径与我选择安装 apk 的路径不匹配。我真傻 我改成

private void downloadApk(String url) {
    Log.d(TAG,"download");
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
    request.setDescription("updating");
    request.setTitle("My app");

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        request.allowScanningByMediaScanner();
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
    }
    request.setDestinationInExternalPublicDir("/xxx/","update.apk");
    // 获得下载服务和队列文件
    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    manager.enqueue(request);
}

private void installApk() {
    File mFile;
    mFile = new File(Environment.getExternalStorageDirectory()+"/xxx/update.apk");
    if (mFile.exists()){
        Intent mIntent = new Intent(Intent.ACTION_VIEW);
        mIntent.setDataAndType(Uri.parse("file://"+mFile.getAbsolutePath()),
                "application/vnd.android.package-archive");
        startActivity(mIntent);
    }else {
        Log.d(TAG,"the file is not exist");
    }

}