小编mik*_*guy的帖子

Android Room编译时警告外​​键中的列不是索引的一部分.这是什么意思?

我正在使用最近在Google I/O上宣布的Android架构组件中的Android的Room Persistence Library.事情似乎有效,但我收到以下错误:

警告:tagId列引用外键但它不是索引的一部分.每当修改父表时,这可能会触发全表扫描,因此强烈建议您创建一个涵盖此列的索引.

我的数据库有3个表:Note,Tag,和JoinNotesTags.对标记的注释是多对多关系,因此JoinNotesTags表用于处理映射.表格很简单:

  • Note.id并且Tag.id都是主键
  • JoinNotesTags.noteId 引用 Note.id
  • JoinNotesTags.tagId 引用 Tag.id

外键约束在JoinNotesTags表上定义.作为参考,这是表的CREATE TABLE声明JoinNotesTags:

"CREATE TABLE IF NOT EXISTS `JoinNotesTags` (
    `id` INTEGER PRIMARY KEY AUTOINCREMENT, 
    `noteId` INTEGER, 
    `tagId` INTEGER, 
    FOREIGN KEY(`noteId`) REFERENCES `Note`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , 
    FOREIGN KEY(`tagId`) REFERENCES `Tag`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION 
)"
Run Code Online (Sandbox Code Playgroud)

这是@Entity该类的相应注释:

@Entity(
        indices = arrayOf(Index(value = *arrayOf("noteId", …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-sqlite android-room

31
推荐指数
3
解决办法
2万
查看次数

MediaStore.Images.Media.insertImage 已弃用

我曾经使用MediaStore.Images.Media.insertImageinsertImage方法保存图像现在已弃用。该文件说:

此方法在 API 级别 29 中已弃用。插入图像应使用MediaColumns#IS_PENDING执行,它提供了对生命周期的更丰富的控制。

我真的不明白,因为MediaColumns.IS_PENDING它只是一个标志,我应该如何使用它?

我应该使用ContentValues吗?

android mediastore

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

AlertDialog setCustomTitle样式以匹配标准AlertDialog标题

我正在开发一个Android应用程序,我有一个AlertDialog子类.我想在对话框的标题区域的右侧放置2个ImageButtons(类似于Activity中的ActionBar).我正在使用setCustomTitle()执行此操作,它将标题区域替换为我自己创建的自定义视图.这工作正常,但我的自定义标题区域的样式与标准标题样式(高度,颜色,分隔符等)不同.

我的问题是:由于理解风格因操作系统版本和制造商而异,我如何在对话框中设置自定义标题的样式,以便它与其他AlertDialogs的标准标题样式相匹配?

这是带有标准样式的anAlertDialog图像(这是来自ICS,但我希望能够匹配任何变体 - 而不是这种特殊的样式) 在此输入图像描述

这是一个带有自定义标题和按钮的AlertDialog图像(注意标题高度和颜色与标准对话框的不匹配) 在此输入图像描述

编辑:我不能只将ImageButtons添加到标准标题视图,因为我无法访问它. 如果你知道(可靠的,非黑客的)方法让我在标准标题区域添加按钮,我也会接受.

android custom-titlebar android-alertdialog

21
推荐指数
1
解决办法
4116
查看次数

当从背景唤醒应用程序时,voip推和常规推送之间的区别

我有一个消息服务,我用它来定期推送通知.例如,当一个用户发送消息时,另一个用户接收带有该消息的推送通知.我注意到如果手机是wifi和3g/4g,应用程序被杀死(屏幕被锁定),将收到通知.如果设备仅在wifi上并且应用程序被杀死(并且屏幕被锁定),则不会收到通知.

我的假设是,为了节省电池,设备在一段时间后断开与wifi的连接,这就是没有收到推送通知的原因.

但是当我使用VOIP推送通知时,情况就不同了.即使应用程序被杀死且设备处于wifi状态(并且屏幕已锁定),也会收到通知.那么这是什么意思?如果手机与wifi断开连接,手机如何接收此通知?

我在这里错过了什么?

voip apple-push-notifications ios

17
推荐指数
2
解决办法
7621
查看次数

ListView onItemLongClickListener不会阻止链接点击

环境: 我有一个Android ListView,其行包含TextViews,其中包含一些带有可点击链接的HTML(URLSpans).在ListView上,我设置了一个OnItemLongClickListener侦听单个行上的长按事件.

目标: 当我收到长时间点击事件时,我想在同一触摸事件的链接上禁用,但我没有看到如何执行此操作.长按一下就会正常发射,但是当我抬起手指时,链接龙头也会闪光.

我已经尝试过了: 我已经尝试在onItemLongClick方法上返回true(和false)- 它似乎没有任何区别.我试图MotionEvent.ACTION_UP在长时间点击后拦截,以便我可以暂时消耗链接点击,但ACTION_UP不会触发 - 至少不会消息ListView.

android listview

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

如何确定设备(Android)可以播放的最高视频分辨率和/或比特率?

我正在开发一款需要播放多个MP4视频的应用.我们已将这些视频转码为多种分辨率,以便为用户提供最佳的播放体验.对于流媒体,我们还为支持它的设备提供HLS,但我们还为用户提供下载视频以供离线播放的功能.

我的问题是:对于给定的Android设备,有没有办法让我以编程方式确定它可以处理的最大分辨率和/或比特率?

video android

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

livedata observable Kotlin 的 lambda 表达式中的“让”是什么意思

我想知道是否有人可以向我解释在带有 livedata 的 lambda 表达式中让这个词。只是打印lamda表达式吗?我猜有些人用它来不再获得空指针异常?

wordViewModel.allWords.observe(this, Observer { value -> 
    value?.let { /*DO SOMETHING WITH VALUE ('IT')*/ }
})
Run Code Online (Sandbox Code Playgroud)

lambda android let kotlin

-1
推荐指数
1
解决办法
277
查看次数