有没有替代使用FileProvider获取安装Android apk的uri?

时间:2017-10-11 19:22:17

标签: android uri compatibility android-fileprovider

因此,在尝试安装apk时,我遇到了uri曝光问题。我编写了一个自动更新android应用程序的库,然后使用以下代码安装新的apk。

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);

由于FileUriExposedException,这对api 24+不起作用所以我切换到FileProvider来获取Uri

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

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

1 个答案:

答案 0 :(得分:1)

  

但是,FileProvider需要以下依赖项编译'com.android.support:support-v4:26.0.0-alpha1'

首先,版本取决于您,当前版本(截至发布此答案时)是26.1.0

其次,FileProvider的实际工件是support-core-utils。要求support-v4将通过传递依赖项引入support-core-utils

  

这是有问题的,因为我想要使用此库的所有项目都需要具有相同版本的支持库

或兼容的。 FileProvider已经存在了几年。

  

那么有什么非黑客方法可以解决FileUriExposedException的问题吗?

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

  

或者有没有一种不同的方法来安装一个可以避免这个问题的apk?

不是我知道的。