我正在尝试为 Android 10 实现 ACCESS_MEDIA_LOCATION 权限,以便访问照片的位置。
首先,应用程序请求 READ_EXTERNAL_STORAGE 权限,以便使用 MediaStore 访问照片。
然后应用程序使用 ExifInterface 读取照片的位置。在 Android 10 中,ExifInterface 失败,因为它没有权限。
我尝试为 ACCESS_MEDIA_LOCATION 添加权限请求,但没有出现权限请求框。但是,该许可随后被授予!
如果我在获得 READ_EXTERNAL_STORAGE 权限之前先请求 ACCESS_MEDIA_LOCATION,那么权限请求框就会出现。
如果我然后请求 READ_EXTERNAL_STORAGE 权限,则权限请求框不会出现,但同样,随后授予权限。(我知道这样做没有意义,但我只是想看看发生了什么。)
我真的很困惑。应该请求用户的许可才能访问照片的位置是有道理的,但是如果之前已授予 READ_EXTERNAL_STORAGE 权限,为什么 ACCESS_MEDIA_LOCATION 的权限框没有出现,为什么在没有用户同意的情况下授予权限?
有什么我遗漏的东西会使权限框出现吗?
下面的代码片段。
安卓清单:
<manifest ...>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
…
Run Code Online (Sandbox Code Playgroud)
片段1:
public class Fragment1 extends Fragment {
…
public View onCreateView(...
…
Log.d(TAG, "Entering Fragment1 requestPermissions operation for permission READ_EXTERNAL_STORAGE");
Log.d(TAG, "Permission ACCESS_MEDIA_LOCATION, " + this.requireContext().checkSelfPermission(Manifest.permission.ACCESS_MEDIA_LOCATION));
Log.d(TAG, "Permission READ_EXTERNAL_STORAGE, …Run Code Online (Sandbox Code Playgroud)