JetPack构成伴奏者权限,可以访问本地文件

发布于 2025-02-03 08:06:10 字数 4095 浏览 4 评论 0原文

我想使用放置在LIBS目录中的密钥库文件。 我在androidManifest.xl中添加了权限,

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <uses-sdk tools:overrideLibrary="com.github.dhaval2404.colorpicker,com.datacap.device_connection" />
    <uses-permission android:name="com.google.android.things.permission.MANAGE_INPUT_DRIVERS"/>

我还请在运行时使用cancerist Permissions以这种方式:

@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun PermissionsRequest(
    permissions: List<String>,
    deniedMessage: String,
    rationaleMessage: String
) {

    val multiplePermissionsState = rememberMultiplePermissionsState(permissions = permissions)
    HandelRequest(
        multiplePermissionsState = multiplePermissionsState,
        deniedContent = { shouldShowRationale ->
            PermissionDeniedContent(
                deniedMessage = deniedMessage,
                rationaleMessage = rationaleMessage,
                shouldShowRationale = shouldShowRationale,
                onRequestPermission = { multiplePermissionsState.launchMultiplePermissionRequest() }
            )
        },
        content = {}
    )
}

@Composable
fun Content(text: String, showButton: Boolean = true, onClick: () -> Unit) {
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(50.dp)
            .background(color = Color.Gray),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(text = text, textAlign = TextAlign.Center)
        Spacer(modifier = Modifier.height(12.dp))
        if (showButton) {
            Button(onClick = onClick) {
                Text(text = "Give Permission")
            }
        }
    }
}

@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun HandelRequest(
    multiplePermissionsState: MultiplePermissionsState,
    deniedContent: @Composable (Boolean) -> Unit,
    content: @Composable () -> Unit
) {
    var shouldShowRationale by remember { mutableStateOf(false) }

    val result = multiplePermissionsState.permissions.all {
        shouldShowRationale = it.status.shouldShowRationale
        it.status == PermissionStatus.Granted
    }
    if (!result) deniedContent(shouldShowRationale)
}

@ExperimentalPermissionsApi
@Composable
fun PermissionDeniedContent(
    deniedMessage: String,
    rationaleMessage: String,
    shouldShowRationale: Boolean,
    onRequestPermission: () -> Unit
) {
    if (shouldShowRationale) {
        AlertDialog(
            onDismissRequest = {},
            title = {
                Text(
                    text = "Permission Request",
                    style = TextStyle(
                        fontSize = MaterialTheme.typography.h6.fontSize,
                        fontWeight = FontWeight.Bold
                    )
                )
            },
            text = {
                Text(rationaleMessage)
            },
            confirmButton = {
                Button(onClick = onRequestPermission) {
                    Text("Give Permission")
                }
            }
        )
    } else {
        Content(text = deniedMessage, onClick = onRequestPermission)
    }
}

我要求这些权限:

val PERMISSIONS_LIST = listOf(Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)

在应用程序上,在App第一次运行i上获取权限请求,我给它一个访问权限的是使用相机和录制视频,这是第二个用于访问照片和媒体内容的视频。

但是我仍然一次又一次地遇到同样的错误:

失败,例外:java.io.filenotfoundexception:app/libs/keystore/keypos.jks:open失败:enoent(no uke file或目录)

如何解决此问题?由于这个问题,我无法使用SSL设置。

I want to use a keystore file that I placed in libs directory.
i added the permissions in the AndroidManifest.xl

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <uses-sdk tools:overrideLibrary="com.github.dhaval2404.colorpicker,com.datacap.device_connection" />
    <uses-permission android:name="com.google.android.things.permission.MANAGE_INPUT_DRIVERS"/>

I requested the permission during runtime as well using a Accompanist Permissions this way:

@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun PermissionsRequest(
    permissions: List<String>,
    deniedMessage: String,
    rationaleMessage: String
) {

    val multiplePermissionsState = rememberMultiplePermissionsState(permissions = permissions)
    HandelRequest(
        multiplePermissionsState = multiplePermissionsState,
        deniedContent = { shouldShowRationale ->
            PermissionDeniedContent(
                deniedMessage = deniedMessage,
                rationaleMessage = rationaleMessage,
                shouldShowRationale = shouldShowRationale,
                onRequestPermission = { multiplePermissionsState.launchMultiplePermissionRequest() }
            )
        },
        content = {}
    )
}

@Composable
fun Content(text: String, showButton: Boolean = true, onClick: () -> Unit) {
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(50.dp)
            .background(color = Color.Gray),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(text = text, textAlign = TextAlign.Center)
        Spacer(modifier = Modifier.height(12.dp))
        if (showButton) {
            Button(onClick = onClick) {
                Text(text = "Give Permission")
            }
        }
    }
}

@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun HandelRequest(
    multiplePermissionsState: MultiplePermissionsState,
    deniedContent: @Composable (Boolean) -> Unit,
    content: @Composable () -> Unit
) {
    var shouldShowRationale by remember { mutableStateOf(false) }

    val result = multiplePermissionsState.permissions.all {
        shouldShowRationale = it.status.shouldShowRationale
        it.status == PermissionStatus.Granted
    }
    if (!result) deniedContent(shouldShowRationale)
}

@ExperimentalPermissionsApi
@Composable
fun PermissionDeniedContent(
    deniedMessage: String,
    rationaleMessage: String,
    shouldShowRationale: Boolean,
    onRequestPermission: () -> Unit
) {
    if (shouldShowRationale) {
        AlertDialog(
            onDismissRequest = {},
            title = {
                Text(
                    text = "Permission Request",
                    style = TextStyle(
                        fontSize = MaterialTheme.typography.h6.fontSize,
                        fontWeight = FontWeight.Bold
                    )
                )
            },
            text = {
                Text(rationaleMessage)
            },
            confirmButton = {
                Button(onClick = onRequestPermission) {
                    Text("Give Permission")
                }
            }
        )
    } else {
        Content(text = deniedMessage, onClick = onRequestPermission)
    }
}

I asked for these permissions:

val PERMISSIONS_LIST = listOf(Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)

on the app first run I get the permission request and I give it an access the first one is for using camera and recording videos, the second one for accessing photos and media contents.

but I'm still getting this same error again and again:

failed with exception: java.io.FileNotFoundException: app/libs/keystore/keypos.jks: open failed: ENOENT (No such file or directory)

How can fix this issue? I can't use the ssl settings because of this issue.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

驱逐舰岛风号 2025-02-10 08:06:10

看来可以从应用程序包中读取本地文件。

我将密钥库放在res目录中,并将其放在其自己的目录中。并使用上下文来获得它。

val file = context?.resources?.openRawResource(R.raw.keypos)

就是这样。

It seems that reading a local file from the app package can be done in another way.

I placed the keystore in the res directory, in its own directory. and used the context to get it.

val file = context?.resources?.openRawResource(R.raw.keypos)

This is it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文