gpt4 book ai didi

java - 无法让android权限请求对话框出现

转载 作者:行者123 更新时间:2023-11-29 22:59:05 25 4
gpt4 key购买 nike

尝试从我正在处理的应用程序的下载目录中读取文件,但我终究无法打开对话框让用户授予访问文件的权限。

尝试添加从用户可以从其他站点下载的文件中导入数据的功能。尝试从下载文件夹中打开文件只是失败。最后确定它绝对是访问未启用的文件的权限,我无法获得允许权限的对话框。放弃并从头开始创建一个新应用

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

粘贴在 android 开发者网站示例中,说明如何启用权限并在 android 开发工作室中从头开始给出错误。

“错误的第一个参数类型。找到:'android.content.Context',需要:'android.app.Activity'检查信息:shouldShowRequestPermissionRationale (android.app.Activity,String) 在 ActivityCompat 中不能应用于 (android.content.Context,String)”

使用 (activity)this 可以消除错误,但此时对 android 文档的信任度不高。仍然无法出现权限对话框。尝试几个其他示例和 Stackoverflow“解决方案”,但没有任何乐趣。

从头开始完成基本应用程序,坚持一些 printlns 以显示进度,模拟器或手机上没有对话框。 Logcat 显示一切似乎都在这个过程中工作,它发现不允许的权限,分支到请求它的部分,然后测试响应是否允许它,除了它实际打开对话框的部分。我没有运气找到与 egl 错误相关的任何内容。示例日志:

07-20 08:30:19.999 23735-23735/anticlimacticteleservices.myapplication I/System.out: need to ask for permission
07-20 08:30:20.014 23735-23775/anticlimacticteleservices.myapplication D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
07-20 08:30:20.049 23735-23775/anticlimacticteleservices.myapplication I/OpenGLRenderer: Initialized EGL, version 1.4
07-20 08:30:20.050 23735-23775/anticlimacticteleservices.myapplication W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
07-20 08:30:20.096 23735-23775/anticlimacticteleservices.myapplication D/EGL_emulation: eglCreateContext: 0xaaa757e0: maj 2 min 0 rcv 2
07-20 08:30:20.099 23735-23775/anticlimacticteleservices.myapplication D/EGL_emulation: eglMakeCurrent: 0xaaa757e0: ver 2 0 (tinfo 0xac396210)
07-20 08:30:20.133 23735-23775/anticlimacticteleservices.myapplication D/EGL_emulation: eglMakeCurrent: 0xaaa757e0: ver 2 0 (tinfo 0xac396210)
07-20 08:30:20.181 23735-23735/anticlimacticteleservices.myapplication I/System.out: You denied write external storage permission.
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;


public class MainActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context thisActivity = this;
try{
int writeExternalStoragePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(writeExternalStoragePermission!= PackageManager.PERMISSION_GRANTED){
System.out.println("need to ask for permission");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
}else {
System.out.println("it actually has permission now");
}
}catch (Exception ex) {
System.out.println("failed to get permissions with "+ex.getMessage());
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == PERMISSION_REQUEST_CODE) {
int grantResultsLength = grantResults.length;
if(grantResultsLength > 0 && grantResults[0]==PackageManager.PERMISSION_GRANTED) {
System.out.println("You did it finally");
}else {
System.out.println("You denied write external storage permission.");
}
}
}

}

我希望弹出一个对话框,允许我授予必要的权限以打开下载文件夹中的文件。

最佳答案

您的 list 有:

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

您的 Java 代码没有引用 READ_EXTERNAL_STORAGE。它指的是 WRITE_EXTERNAL_STORAGE。那些需要匹配。

解决这个问题:

  1. 决定是否需要写作

  2. 如果对 #1 的回答是“是的,我需要写”,请切换您的 list 以引用 WRITE_EXTERNAL_STORAGE

  3. 如果对 #1 的回答是“不,阅读是基础”,请切换您的 Java 代码以引用 READ_EXTERNAL_STORAGE

FWIW,this sample app来自 this book演示了 WRITE_EXTERNAL_STORAGE 的使用。

关于java - 无法让android权限请求对话框出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57126235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com