我开始以 API 33 为目标平台的 Android 13。该应用正在请求Manifest.permission.READ_EXTERNAL_STORAGE较旧的 API。现在我知道我必须请求新权限:READ_MEDIA_IMAGES和READ_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_IMAGES和READ_MEDIA_VIDEO?
我正在使用改造来处理 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的仪器测试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)
我是否需要创建第二个模块来运行黄瓜测试?
我发现了其他类似的问题,但没有一个答案有用。在一种方法中我有类似的东西:
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
很抱歉打开了有关此问题的其他问题.我已经按照旧问题中的所有建议的解决方案,但它仍然无效.我收到错误:
错误:任务':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) 当我使用rxjava时,Android Studio自动使用
@io.reactivex.annotations.NonNull
Run Code Online (Sandbox Code Playgroud)
作为方法的注释。
如果我将其替换为有什么问题?
@android.support.annotation.NonNull
Run Code Online (Sandbox Code Playgroud)
代替?
我有点担心我会丢掉一些皮棉支票,但是却没有找到任何东西
我有两个列表,我想获取只包含第一个列表中不在第二个列表中的元素的列表。问题是我需要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为该类设置新方法。
我在 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 ×7
annotations ×1
build.gradle ×1
cucumber ×1
firebase ×1
image ×1
kotlin ×1
list ×1
mocking ×1
permissions ×1
retrofit ×1
rx-java ×1
unit-testing ×1