我对Android开发还是个新手.我想问一个问题,一旦我点击按钮,这个代码就会打开设置应用程序.我想为安装在我的手机上的以下演示应用程序https://github.com/Picovoice/porcupine/tree/master/demo/android/Activity相同.为什么打不开呢?我需要在我的 list 文件中添加一些东西吗?提前谢谢你了.

这是包名称为"com.android.sets"的代码,但不适用于"com.android.youtube".

package com.example.jkfdsjlk

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.example.jkfdsjlk.ui.theme.JkfdsjlkTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            JkfdsjlkTheme {
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    MyApp(
                        modifier = Modifier.padding(innerPadding)
                    )
                }
            }
        }
    }
}

@Composable
fun OpenAppButton() {
    val context = LocalContext.current

    // Create a launcher for activity result
    val launcher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.StartActivityForResult()
    ) { }

    Button(
        onClick = {
            // Intent to open another app
            val intent = context.packageManager.getLaunchIntentForPackage("ai.picovoice.porcupine.demo")

            // Check if the intent is not null and launch the app
            intent?.let {
                launcher.launch(intent)
            }
        },
        modifier = Modifier
            .padding(16.dp)
            .fillMaxWidth(),
        content = {
            Text(text = "Open Another App")
        }
    )
}

@Composable
fun MyApp(modifier: Modifier) {
    Surface(color = MaterialTheme.colorScheme.background) {
        Column(
            modifier = Modifier
                .fillMaxSize()
                .padding(16.dp),
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            OpenAppButton()
        }
    }
}

推荐答案

如果您在PackageManager上调用像getLaunchIntentForPackage()这样的方法,则需要考虑在 list 中进行哪些更改,以符合Android 11及更高版本上的package visibility rules.

在你的情况下,声明你的specific package name应该是可行的:

<queries>
    <package android:name="ai.picovoice.porcupine.demo" />
</queries>

Android相关问答推荐

Android Bundle getSerializable(String?):'可序列化?&# 39、被抛弃了在Java中被弃用

在Android Studio中陷入了不兼容的Gradle版本的循环

为什么R8不混淆某些类?

使用Kotlin的SD卡

显示本地房间数据库中未保存的项目的动态列表

如何在安卓系统上使用Float16霓虹灯?

如何将两个变量传递给Nav主机,然后将其传递给另一个屏幕?

更改选定的切换轨道 colored颜色

相机2问题:设置AE区域、AF区域和AWB区域.

我的自定义小吃店不适合我的全宽屏幕尺寸

使用 Kotlin 在 Android 中导航时如何防止 ViewModel 被杀死?

在 Jetpack Compose 中对齐行项目

任务 ':app:checkReleaseDuplicateClasses' 执行失败

每次在 Jetpack Compose 中调用导航

每次在 Jetpack Compose 中调用导航

react 从输入中找到路径'lib/arm64-v8a/libfbjni.so'的本机2个文件

获取模板向导配方类 Intellij 中的应用程序包名称

为 AlertDialog 的消息文本设置自定义字体

Kotlin:如何在另一个变量的名称中插入一个变量的值

lambda 函数中的类型不匹配 - Kotlin