我开发用于在屏幕上绘图的应用程序 我有一堆按钮的工具面板.根据当前的用户操作,其中一些必须被禁用或按下.考虑到"state"属性是只读的,我如何以编程方式更改按钮的UIControlState?如果不可能,为此目的可以选择什么?
我正在编写用于下载和存储不同类型的 MediaStore 文件的代码。对于运行 Android 10 及更高版本的设备,我将它们全部存储到Downloads集合中,并且工作正常。运行 Android 10 以下的用户没有此集合。一开始我尝试将它们存储到Files集合中,但事实证明不可能将例如图像存储到Files集合中。所以我来到了这段代码:
fun createDownloadsFile(context: Context, fileName: String, mimeType: String): Uri? {
val values = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, fileName)
put(MediaStore.MediaColumns.MIME_TYPE, mimeType)
}
val collection = if (hasAndroid10()) {
values.put(MediaStore.MediaColumns.IS_PENDING, 1)
MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else getMediaStoreCollectionBelowAndroid10(mimeType)
return context.contentResolver.insert(collection, values)
}
private fun getMediaStoreCollectionBelowAndroid10(mimeType: String): Uri = when {
mimeType.startsWith("image/") -> MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
mimeType.startsWith("audio/") -> MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
mimeType.startsWith("video/") -> MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
else -> MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL)
}
Run Code Online (Sandbox Code Playgroud)
现在,图像和视频在低于 10 的 Android 上可以正常存储。但尝试存储音频时会崩溃contentResolver.insert(collection, values):
java.lang.NullPointerException: …
android ×3
audio ×1
download ×1
google-maps ×1
ios ×1
ios10 ×1
kotlin ×1
mediastore ×1
mime-types ×1
statusbar ×1
styles ×1
swift3 ×1
uibutton ×1