【发布时间】:2023-03-24 21:13:02
【问题描述】:
我正在开发一个需要访问麦克风以进行语音识别的自定义键盘。实际使用语音识别的系统已经到位,但我想提示用户仅在他们按下麦克风按钮的那一刻给予许可。问题是我习惯使用的代码
if (ContextCompat.checkSelfPermission(...) == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(activity, permissions, 0);
}
需要一个我无法从输入法服务访问的活动。实际上,我设法通过创建一个新活动并在那里传递所有权限请求来使其工作,但我希望它在这样做时不要隐藏键盘。以下是我启动新 Activity 的方式:
Intent intent = new Intent(this, PermissionsActivity.class); //this being the Input Method Service
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.putExtra(PermissionsActivity.PERMISSIONS_EXTRA, permissionsArray);
有没有另一种更好的方法来实现这一点,而无需创建 Activity 或避免隐藏键盘?
【问题讨论】:
-
并非如此。 IME 是一项服务。您只能从 Activity 请求权限。您可以尝试弹出一个透明的 Activity 而不是调用 setContentView 并在您获得对权限的响应(正面或负面)后立即完成 Activity。它可能工作。
-
这就是我所做的,它工作得还不错。唯一的问题是,一旦 Activity 启动,键盘就会被隐藏,无论用户选择做什么(拒绝请求或授予权限),他们都必须重新打开键盘并重新按下按钮。我希望键盘保持可见,能够响应请求结果。我意识到这只是一件小事,只会在他们第一次尝试使用语音识别时发生,但我想知道是否有办法实现这一点,因为像 gboard 这样的其他键盘可以做到这一点。
标签: java android android-studio