我使用 DownloadManager 下载照片并将其保存到外部图片目录:
.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, File.separator + filename)
Run Code Online (Sandbox Code Playgroud)
Marshmallow 需要 WRITE_EXTERNAL_STORAGE(如预期),但在 Android Q 及更高版本上,它无需许可即可正常工作。为什么会这样?是因为范围存储吗?
android android-permissions android-download-manager android-external-storage scoped-storage
我正在 Android Studio 中开发一个小项目。我已将可绘制添加到 res/drawable 文件夹中。

但是我无法从代码中获取它。我尝试过不同的方法:
ContextCompat.getDrawable(getActivity(), R.drawable.ic_training);
Run Code Online (Sandbox Code Playgroud)
和
val drawable: Drawable? = ContextCompat.getDrawable(context.applicationContext, R.drawable.ic_training )
val drawable2: Drawable = R.drawable.ic_training
Run Code Online (Sandbox Code Playgroud)
它们都返回错误未解决的引用。这是我的 XML 文件:
<vector
android:id = "@+id/ic_training"
android:alpha="0.85" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"
android:name="ic_training" >
<path android:fillColor="#FF000000" android:pathData="M22,21c-1.11,0 -1.73,-0.37 -2.18,-0.64 -0.37,-0.22 -0.6,-0.36 -1.15,-0.36 -0.56,0 -0.78,0.13 -1.15,0.36 -0.46,0.27 -1.07,0.64 -2.18,0.64s-1.73,-0.37 -2.18,-0.64c-0.37,-0.22 -0.6,-0.36 -1.15,-0.36 -0.56,0 -0.78,0.13 -1.15,0.36 -0.46,0.27 -1.08,0.64 -2.19,0.64 -1.11,0 -1.73,-0.37 -2.18,-0.64 -0.37,-0.23 -0.6,-0.36 -1.15,-0.36s-0.78,0.13 -1.15,0.36c-0.46,0.27 -1.08,0.64 -2.19,0.64v-2c0.56,0 0.78,-0.13 1.15,-0.36 0.46,-0.27 1.08,-0.64 2.19,-0.64s1.73,0.37 2.18,0.64c0.37,0.23 0.59,0.36 1.15,0.36 0.56,0 0.78,-0.13 1.15,-0.36 …Run Code Online (Sandbox Code Playgroud) 注意:我不能使用关系,因为我们有性能问题,这在直接连接查询中没有重现。
直到我添加target user和来自group user和对应
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_target_user
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_from_group_user
Run Code Online (Sandbox Code Playgroud)
它运作良好。但是添加后,我无法弄清楚如何在查询中映射这些前缀。
class ReadMessageEntity(
@Embedded
var message: MessageEntity,
@Embedded
var block: BlockEntity?,
@Embedded
var user: ChatUserRelationEntity,
@Embedded(prefix = "target_user_")
var targetUser: ChatUserEntity?,
@Embedded(prefix = "from_group_user_")
var fromGroupUser: ChatUserEntity?
)
Run Code Online (Sandbox Code Playgroud)
这是我试图查询的:
@Transaction
@Query("""
SELECT * FROM message_item
LEFT JOIN block_item ON block_item.block_message_id = message_item.message_local_id
LEFT JOIN chat_user_relation ON chat_user_relation.chat_user_id = message_item.message_user_id
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_target_user
LEFT JOIN …Run Code Online (Sandbox Code Playgroud) 我正在努力寻找一种方法来创建线程来监视 Exoplayer 应用程序中的playbackPosition。
在下面的代码中,我需要的一个简单任务是通过重写onIsPlayingChanged函数每 1000 毫秒记录一次位置参数。但我知道这种情况只会发生一次,并且如果应用程序状态发生变化,但是为了使其连续,我认为我应该创建一个线程。请让我知道如何实现这一目标。正如你所看到的,注释的代码是我尝试过的,但它肯定是不正确的。
private class PlaybackStateListener implements Player.EventListener{
@Override
public void onIsPlayingChanged(boolean isPlaying) {
//TODO: Add handler to poll the playback position continuously.
/* if(isPlaying){
HandlerCompat.
postDelayed(new Runnable() {
@Override
public void run() {
long positionParam = playbackPosition;
}
});
}*/
if (isPlaying) {
Log.d(TAG, "Playing position is " + playbackPosition);
} else {
// Not playing because playback is paused, ended, suppressed, or the player
// is buffering, stopped or failed. Check player.getPlaybackState,
// player.getPlayWhenReady, …Run Code Online (Sandbox Code Playgroud)