是否有替代方案使用FileProvider来获取安装Android apk的uri?

是否有替代方案使用FileProvider来获取安装Android apk的uri?

问题描述:

所以我试图安装apk时遇到了uri暴露的问题。我写了一个自动更新android应用程序的库,然后用以下代码安装新的apk。是否有替代方案使用FileProvider来获取安装Android apk的uri?

Uri uri = VersionManagerUtil.getFileDestinationUri(apkDir, mParameters.getPackageName()); 

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(uri); 
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
intent.putExtra(Intent.EXTRA_RETURN_RESULT, true); 
startActivityForResult(intent, RC_REQUEST_INSTALL); 

然而,这并不对API 24+由于FileUriExposedException工作,所以我切换到FileProvider得到乌里

Uri uri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", file); 

这个伟大的工程。不过,FileProvider需要以下依赖 compile 'com.android.support:support-v4:26.0.0-alpha1'这是有问题的,因为我想使用这个库的所有项目都需要具有相同版本的支持库。那么有没有解决FileUriExposedException问题的非哈希方法?或者有没有不同的方式来安装一个可以避免这个问题的apk?

然而,FileProvider需要以下依赖编译“com.android.support:support-v4:26.0.0-alpha1”

首先,该版本是你的,而当前的(截至我发布这个答案时)是26.1.0

其次,FileProvider的实际神器是support-core-utils。要求support-v4将通过传递依赖项拉动support-core-utils

这是问题,因为所有的项目,我想使用这个库就需要有支持库

或兼容的一个相同版本。 FileProvider已经存在了几年。

那么是否有任何非hacky的方式来解决FileUriExposedException的问题?

您可以使用FileProvider。或者,您可以编写自己的ContentProvider提供该文件。

或者是否有不同的方法来安装一个apk,以避免这个问题一起?

不是我所知道的。