相关疑难解决方法(0)

Android Q:通过MediaStore获取带有位置信息的图库

此处查看 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 mediastore android-contentresolver android-10.0

6
推荐指数
1
解决办法
2068
查看次数

为什么当我请求 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)

android android-permissions

5
推荐指数
0
解决办法
1028
查看次数