小编jam*_*s04的帖子

Android API 33 权限未授予

因此,当我在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 runtime-permissions android-tiramisu android-13

22
推荐指数
2
解决办法
6万
查看次数

SecurityException: getSerial: 用户 10134 不符合访问设备标识符的要求

我想从 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)

那么如果我不能授予权限,我如何获得序列号..?我该怎么办?

android securityexception android-manifest kotlin

12
推荐指数
1
解决办法
8213
查看次数

ConstraintLayout 在 RecyclerView 项目中设置 imageview 宽度和高度的百分比

当我们有一个带有图像的 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

7
推荐指数
1
解决办法
4001
查看次数

@Relation Room DB 多列

如果我想关联 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)

所以连接有多个约束?

android-sqlite android-room android-room-relation

6
推荐指数
0
解决办法
254
查看次数

存储库类中的协程范围

假设我有一个 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 ......?

android repository mvvm kotlin kotlin-coroutines

5
推荐指数
1
解决办法
1921
查看次数

Drop column Room迁移android

我有一个表服务器

@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)

migration kotlin android-studio android-room

5
推荐指数
2
解决办法
2078
查看次数

加密 Room 数据库的特定列

我在聊天应用程序中有一个包含消息的表格,我想在我的房间数据库的表格的列正文中使用 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)

我想知道是否有更好,更正式的方法来做到这一点

android tripledes kotlin android-room

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

使用导航组件从后台删除片段

我有一个带有 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

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