【问题标题】:Is there an alternative to using FileProvider to get a uri for installing Android apk?是否有替代使用 FileProvider 获取安装 Android apk 的 uri 的方法?
【发布时间】:2017-10-11 19:22:16
【问题描述】:

所以我在尝试安装 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?

【问题讨论】:

    标签: android uri compatibility android-fileprovider


    【解决方案1】:

    但是,FileProvider 需要以下依赖 compile '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?

    我不知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2021-11-06
      相关资源
      最近更新 更多