更改权限后"Choose File"按钮不起作用



嗨,我的项目要求我使用网络视图和相机。我在HTML中实现了代码,按下"选择文件"按钮后,Web视图将让我选择是使用相机捕获照片还是从文件管理器上传文件。但我不想要文件选项,我只希望它在按下按钮后立即启动相机。这是它要求允许使用我的相机和外部存储

的代码
public void get_file(){
String[] perms = {/*Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, */Manifest.permission.CAMERA};
//Checking for CAMERA Permissions first
//if (ASWP_CAMUPLOAD && check_permission(3)) {
//ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, file_perm);
//Checking for storage permission to write images for upload
if (ASWP_FUPLOAD && ASWP_CAMUPLOAD && !check_permission(2) && !check_permission(3)) {
ActivityCompat.requestPermissions(MainActivity.this, perms, file_perm);
//Checking for WRITE_EXTERNAL_STORAGE permission
} else if (ASWP_FUPLOAD && !check_permission(2)) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, file_perm);
//Checking for CAMERA permissions
} else if (ASWP_CAMUPLOAD && !check_permission(3)) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, file_perm);
}
}
public boolean check_permission(int permission){
switch(permission){
case 1:
return ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
case 2:
return ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
case 3:
return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;
}
return false;
}

这是我更改的代码

static boolean ASWP_FUPLOAD     = false;     //upload file from webview
static boolean ASWP_ONLYCAM     = true ;     //only use camera as input

我将上传文件从网络视图选项从真更改为假。但奇怪的是,在我将其更改为 false 后,按下按钮再也没有工作了。我做错了什么?如果我只想使用相机,我应该删除公共无效 get_file(( 中的一些行吗? 希望得到一些建议,谢谢! 编辑:我找到了一个ASWP_ONLYCAM的代码,它只允许相机作为唯一的输入!但是我不知道如何激活它! 附言如果您需要更多信息,请告诉我

正如我所看到的,您正在使用Android SmartWebView。

我想你用这里的代码(ProgramCreek(来支持自己,因为你的方法到目前为止是相同的。 如果是这样,ASWP_FUPLOADASWP_CAMUPLOAD都需要true,因为ASWP_CAMUPLOAD取决于ASWP_FUPLOAD

然后,您需要进入MainActivity.在asw_view.setWebChromeClient()里面,你应该有这些空隙:

public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback,WebChromeClient.FileChooserParams fileChooserParams)

有照片管理的逻辑。第一个与Android API 16+兼容,第二个与21+兼容。

现在,从API 16+(第一种方法(开始,我看不到直接的解决方案。您可以使用此线程中的那个。第二种方法很容易编辑。您有if语句来验证ASWP_CAMUPLOADASWP_FUPLOAD。在ASWP_CAMUPLOAD验证结束时,您有以下内容:

if(ASWP_CAMUPLOAD) {
//...
} else {
intentArray = new Intent[0];
}

return false相反,文件上传本身应该被取消,相机上传将成为唯一的解决方案。

最新更新