Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android以编程方式更新apk_Java_Android - Fatal编程技术网

Java Android以编程方式更新apk

Java Android以编程方式更新apk,java,android,Java,Android,我的手机上有一个应用程序。我试图调用intent并安装新版本的apk。我遇到了这样的错误:“解析包时出现问题”。如果我从手机中删除apk并手动安装apk,它可以正常工作。有什么问题 Intent intent = new Intent(Intent.ACTION_VIEW); Uri uri = FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID + ".provider", new Fil

我的手机上有一个应用程序。我试图调用intent并安装新版本的apk。我遇到了这样的错误:“解析包时出现问题”。如果我从手机中删除apk并手动安装apk,它可以正常工作。有什么问题

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID + ".provider", new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "ingfilm.apk"));
intent.setDataAndType(uri, "application/vnd.android.package-archive");
startActivity(intent);

这对我来说很有效:

intent.setDataAndType(
    Uri.parse("file://" + context.getFilesDir().getAbsolutePath() + "/" + apk_file),
    "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

关键的区别可能是
.getAbsolutePath()
部分。

编辑答案而不是使布局或措辞更好,这不是我们在Stackoverflow上所做的。相反,你应该在评论中提出建议,并让答案的原始作者进行更改。如果最初安装的应用程序是使用开发工具(如Android Studio)安装的,但更新包是使用不同的方法创建的(例如,build APK),那么签名将不同,这将导致错误。