小编655*_*536的帖子

未解决的参考:READ_MEDIA_IMAGES

我开始以 API 33 为目标平台的 Android 13。该应用正在请求Manifest.permission.READ_EXTERNAL_STORAGE较旧的 API。现在我知道我必须请求新权限:READ_MEDIA_IMAGESREAD_MEDIA_VIDEO。我在清单中添加了:

    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
Run Code Online (Sandbox Code Playgroud)

现在,在应用程序的权限设置中,我看到了一个额外的选项来启用这些权限。我不能做的是在运行时请求权限如果我尝试Manifest.permission.READ_MEDIA_IMAGES在我得到的代码中访问unresolved reference,那么我无法动态请求权限,如果我不这样做,那么用户需要手动执行。

如何处理READ_MEDIA_IMAGESREAD_MEDIA_VIDEO

permissions android

8
推荐指数
1
解决办法
5085
查看次数

改造以解析具有无限数量的对象名称的 json

我正在使用改造来处理 rest-api 调用。我有一个返回以下 json 的 rest API

    "MyObject": {
      "43508": {
        "field1": 4339,
        "field2": "val",
        "field3": 15,
        "field4": 586.78
      },
      "1010030": {
        "field1": 1339,
        "field2": "val212",
        "field3": 1,
        "field4": 86.78
      },...
    }
Run Code Online (Sandbox Code Playgroud)

请注意,该对象MyObject包含名称实际上是 id 的对象。对于所有其他其他 API,我正在使用改造没有问题。在这种情况下,似乎无法使用标准方法:定义一个包含响应中预期字段的类。

有没有办法将此json转换为包含数组的json

{
    "field1": xxx,
    "field2": "yyy",
    "field3": www,
    "field4": zzz
}
Run Code Online (Sandbox Code Playgroud)

或者有没有更好的方法来处理这个问题而不必回到“手动”解析json?

android retrofit

5
推荐指数
1
解决办法
636
查看次数

综合测试和黄瓜测试

我有一个项目,我正在运行Android的仪器测试AndroidJunitRunner.

我现在正在使用Cucumber添加UI自动化测试.如何保持使用扩展的跑步者的Cucumber测试以及使用MonitoringInstrumentation扩展"AndroidJunitRunner"的跑步者的其他测试测试?

build.gradle我以前有

    testInstrumentationRunner "com.packagename.packagename2.MockedTestRunner"
Run Code Online (Sandbox Code Playgroud)

我现在有:

    testApplicationId "com.packagename.packagename2.test"
    testInstrumentationRunner "com.packagename.packagename2.test.Instrumentation"
Run Code Online (Sandbox Code Playgroud)

我是否需要创建第二个模块来运行黄瓜测试?

instrumentation android cucumber

5
推荐指数
1
解决办法
158
查看次数

如何对不同的Build.VERSION.SDK_INT进行单元测试

我发现了其他类似的问题,但没有一个答案有用。在一种方法中我有类似的东西:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    // use API available only on Q
} else { ... }
Run Code Online (Sandbox Code Playgroud)

在编写单元测试时,我希望能够检查所有条件。

我发现有人说我应该将支票包装Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q在一个对象中,然后我可以模拟该对象。

如果我这样做,Android Studio 会向我显示警告,因为我正在使用适用于 Q+ 的 API

其他人说我应该使用 Mockk 来模拟静态方法。问题是,它Build.VERSION.SDK_INT不调用方法,而只是调用一个字段,而我没有找到模拟它的方法。

有办法做到吗?

PS我使用的是Kotlin

android unit-testing mocking

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

使用最新版本的firebase时出现问题

很抱歉打开了有关此问题的其他问题.我已经按照旧问题中的所有建议的解决方案,但它仍然无效.我收到错误:

错误:任务':app:processTravelrepublicDebugGoogleServices'的执行失败.

请通过更新google-services插件的版本来修复版本冲突(有关最新版本的信息,访问 https://bintray.com/android/android-tools/com.google.gms.google-services/)或将com.google.android.gms的版本更新为9.0.0.

如果我为google-play-services切换回9.0.0,那么我收到错误:

A/FirebaseApp: Firebase API initialization failure.
    java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.google.firebase.FirebaseApp.zza(Unknown Source)
        at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
        at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
        at com.google.firebase.FirebaseApp.zzbu(Unknown Source)
        at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1716)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1685)
        at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
        at android.app.ActivityThread.installProvider(ActivityThread.java:5555)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5150)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5090)
        at android.app.ActivityThread.access$1600(ActivityThread.java:177)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:5938)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
     Caused by: java.lang.IllegalAccessError: Method 'void android.support.v4.content.ContextCompat.<init>()' is inaccessible to class 'com.google.firebase.iid.zzg' (declaration of 'com.google.firebase.iid.zzg' …
Run Code Online (Sandbox Code Playgroud)

android firebase google-play-services build.gradle

4
推荐指数
1
解决办法
6903
查看次数

RxJava中的特殊注释

当我使用rxjava时,Android Studio自动使用

@io.reactivex.annotations.NonNull
Run Code Online (Sandbox Code Playgroud)

作为方法的注释。

如果我将其替换为有什么问题?

@android.support.annotation.NonNull
Run Code Online (Sandbox Code Playgroud)

代替?

我有点担心我会丢掉一些皮棉支票,但是却没有找到任何东西

android annotations rx-java

3
推荐指数
1
解决办法
574
查看次数

使用自定义相等函数在 Kotlin 中减去两个列表

我有两个列表,我想获取只包含第一个列表中不在第二个列表中的元素的列表。问题是我需要equal在减法时指定一个自定义。假设我想使用列表条目中的字段之一。让我们说id

我是这样实现的:

list1.filter { log -> list2.none { it.id == log.id } }
Run Code Online (Sandbox Code Playgroud)

或者

val projection = logEntries.map { it.id }
list1.filter { it.id !in projection }
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?请考虑到我无法equal为该类设置新方法。

list data-structures kotlin

3
推荐指数
1
解决办法
4251
查看次数

使用 Jetpack compose 加载本地图像

我在 Android 应用程序中使用 Jetpack Compose。我需要加载图像并使用:

Image(
    modifier = centerHorizontal
        .size(AppSize.profileImage)
        .border(
            width = AppSize.line,
            color = Color.White,
            shape = AppCircleShape()
        ),
    painter = rememberImagePainter(
        data = profile.image,
        builder = {
            transformations(CircleCropTransformation())
        }
    ),
    contentDescription = stringResource(id = R.string.profile_image)
)

Run Code Online (Sandbox Code Playgroud)

效果很好。现在我需要加载使用 DownloadManager 下载的本地图像。下载管理器设置为下载Download文件夹中的图像。它们最终位于文件夹中/storage/emulated/0/Download。我确认图像在那里。

问题是我不知道如何向他们展示。我是否必须运行本地 Web 服务器才能公开它们?

我尝试使用"file://${user.profile}"在 Chrome 上运行的 , 但它不起作用。

android image android-jetpack-compose

0
推荐指数
1
解决办法
5250
查看次数