在此处查看 Android Q中引入的存储访问更改后,默认情况下现在会删除位置信息。
Google要求我们以setRequireOriginal()媒体的uri作为参数调用“ MediaStore”对象。当您一张一张地获取媒体时,此方法有效,但是当我们查询整个画廊的ContentResolver时该怎么办?
请参阅此示例:
String[] projection = {
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DATA,
MediaStore.Files.FileColumns.MEDIA_TYPE,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.WIDTH,
MediaStore.Images.Media.HEIGHT,
MediaStore.Images.Media.LATITUDE, // <----- THIS
MediaStore.Images.Media.LONGITUDE, // <----- THIS
MediaStore.Images.Media.MIME_TYPE,
};
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE;
Uri queryUri = MediaStore.Files.getContentUri("external");
Cursor cursor = null;
MediaStore a ;
try {
cursor = context.getContentResolver().query(queryUri, projection, selection,
null, MediaStore.Images.Media.DATE_TAKEN + " DESC");
}
catch (NullPointerException ex){
}
Run Code Online (Sandbox Code Playgroud)
从Q开始,纬度和经度始终设置为0。如果ACCESS_MEDIA_LOCATION在清单中添加了权限,是否可以获取一批媒体的位置数据?
我正在尝试为 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)