因此,当我在developer.android 站点中读到时,它Android 13在“权限”字段中带来了新的更改。
我有一个聊天应用程序,我需要拨打电话、打开相机、录制音频、在外部存储中读取和写入。因此,在 SplashScreen 中,我向用户请求这些权限。然而,其中一些没有被授予,但甚至系统也没有向我索要这些。
AndroidManifest.xml这是我在文件中声明的内容
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature
android:glEsVersion="0x00020000" …Run Code Online (Sandbox Code Playgroud) 我想从 Android 手机获取 Build.getSerial()。在 Android O 之前,我需要 Manifest.permission.READ_PHONE_STATE 权限。但是在 Android 10 中,我得到了上述异常。我所做的是将此权限添加到清单
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
tools:ignore="ProtectedPermissions"/>
Run Code Online (Sandbox Code Playgroud)
在活动中我需要请求许可但没有这样的许可
ActivityCompat.requestPermissions(this@ListActivity,
arrayOf(Manifest.permission.READ_PHONE_STATE,
<<Manifest.permission.READ_PRIVILEGED_PHONE_STATE>>),
SERIAL_NUMBER_PERMISSION)
Run Code Online (Sandbox Code Playgroud)
那么如果我不能授予权限,我如何获得序列号..?我该怎么办?
当我们有一个带有图像的 recyclerView 时,我想让图像(我不知道它的尺寸)具有最大宽度和最大高度作为屏幕的百分比
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img_rcv_msg_image"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@+id/img_guideline2"
app:layout_constraintHorizontal_bias="0.0"
android:scaleType="centerInside"
android:background="@drawable/image_received_placeholder"
app:layout_constraintStart_toStartOf="@+id/guideline6"
app:layout_constraintTop_toBottomOf="parent"
app:srcCompat="@android:drawable/ic_menu_report_image"
tools:ignore="ContentDescription" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/img_guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.75" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="8dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
所以我将宽度限制在水平方向上的两条准则之间。我怎样才能在垂直方向上做到这一点?
android android-imageview android-constraintlayout constraintlayout-guideline
如果我想关联 2 个表并且关系不仅是一列而是更多,有没有办法使用带有更多参数的 Room @Relation 注释来实现这一点?也许像下面这样
@Relation(parentColumn = "{message_id,account_id}", entityColumn = "{message_id, from_account_id}", entity = Message::class)
var messageList: List<Message> = ArrayList()
Run Code Online (Sandbox Code Playgroud)
所以连接有多个约束?
假设我有一个 Dtos 列表,我想遍历它们并设置一些值,然后将它们插入/更新到我的 Room 数据库。所以从我的 ViewModel 我调用存储库类,在那里运行循环,然后我调用 dao.insertItems(list)。
fun updateItems(itemList: List<ItemDto>) {
val readDate = DateUtils.getCurrentDateUTCtoString()
???SCOPE???.launch(Dispatchers.IO) {
for (item in itemList)
item.readDate = readDate
itemDao.updateItems(itemList)
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我必须在 Repository 类中使用什么样的 CourtineScope。我是否必须使用 Dispatchers.Main.. 创建一个 repositoryScope?也许是 GlobalScope ......?
我有一个表服务器
@Entity(tableName = "servers")
data class ServerDto(
@PrimaryKey
@ColumnInfo(name = "server_id")
var serverId: Long,
@ColumnInfo(name = "address", defaultValue = "")
var serverAddress: String,
@ColumnInfo(name = "description", defaultValue = "")
var serverDescription: String,
@ColumnInfo(name = "file_segment")
var fileSegment: Int
) : Serializable
Run Code Online (Sandbox Code Playgroud)
和一个表帐户
@Entity(tableName = "accounts", primaryKeys = ["server_id", "account_id"])
data class AccountDto(
@ColumnInfo(name = "server_id")
val serverId: Long,
@ColumnInfo(name = "account_id")
val accountId: Int,
@ColumnInfo(name = "username", defaultValue = "")
val username: String,
@ColumnInfo(name = "password", defaultValue = "")
val …Run Code Online (Sandbox Code Playgroud) 我在聊天应用程序中有一个包含消息的表格,我想在我的房间数据库的表格的列正文中使用 TripleDes 加密。我现在要做的是,每当我有一组新消息时,我都会遍历它们并将 .body 字段更改为 TripleDes.encrypt(body)
// TripleDes encryption to inserted messages
messageDtoList.forEach {
if (it.body.isNotEmpty())
it.body = TripleDesEncrypt.encrypt(it.body, Params.TRIPLE_DES_KEY)
}
AppDatabase.invoke(MyApplication.instance).messageDao().insert(messageDtoList)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好,更正式的方法来做到这一点
我有一个带有 navHost 片段的 PinCreateActivity 和 2 个片段 PinSetup 和 PinCreate 片段。
当 Activity 启动时,PinSetup 是默认片段,之后通过单击按钮导航到 PinCreate 片段。我想要的是来自 PinCreate 片段,当用户单击后退按钮时,不要像 PinCreateActivity 那样转到 PinSetup 并导航到后退堆栈。所以我想当我从 PinSetup 导航到 PinCreate 片段时,我必须从 backStack 中删除 PinSetup。我怎样才能做到这一点?
导航图.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pin_create_nav_graph"
app:startDestination="@id/pinSetupFragment">
<fragment
android:id="@+id/pinSetupFragment"
android:name="com.example.ui.fragments.pin.PinSetupFragment"
android:label="Create PIN"
tools:layout="@layout/fragment_pin_setup" >
<action
android:id="@+id/action_pinSetupFragment_to_pinCreateFragment"
app:destination="@id/pinCreateFragment" />
</fragment>
<fragment
android:id="@+id/pinCreateFragment"
android:name="com.example.ui.fragments.pin.PinCreateFragment"
android:label="Your PIN"
tools:layout="@layout/fragment_pin_create" />
</navigation>
Run Code Online (Sandbox Code Playgroud)
Pin创建活动
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
...
navController = Navigation.findNavController(this, R.id.pin_create_host_fragment)
// onClick
navController.navigate(R.id.action_pinSetupFragment_to_pinCreateFragment)
}
Run Code Online (Sandbox Code Playgroud) android-fragments kotlin android-architecture-navigation android-jetpack-navigation android-navigation-graph
android ×5
kotlin ×5
android-room ×3
android-13 ×1
android-architecture-navigation ×1
migration ×1
mvvm ×1
repository ×1
tripledes ×1