[Android 10权限被拒绝

问题描述 投票:1回答:1

[当我尝试将图像发送到服务器时,出现错误。在装有Android 6和Android 9的设备上,一切正常。但是,当我将设备与Android 10或BlueStacks 4模拟器一起使用时,会出现错误。我的宣言看起来像这样:

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

我还尝试将以下标签添加到清单中:android:requestLegacyExternalStorage="true"但我的问题仍然存在。在日志中,我收到一个错误,提示Compressor库为空

我的活动:

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        when (requestCode) {
            PermUtil.REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS -> {
                if (grantResults.isEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Pix.start(this, Options.init().setRequestCode(100));
                } else {
                    ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL)
                    Toast.makeText(
                        this, "Approve permissions to open Pix ImagePicker",
                        Toast.LENGTH_LONG).show();
                }
            }
        }
    }

//导致错误的函数

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {

            Constants.ACTION_REQUEST_CAMERA ->{
                if (resultCode == Activity.RESULT_OK){

                    returnValue = data!!.getStringArrayListExtra(Pix.IMAGE_RESULTS)!!

                        val f = File(returnValue[0])
                        photoFile = Compressor(this).compressToFile(f)

                    Toast.makeText(this, f.toString(), Toast.LENGTH_LONG).show()
                }
            }
        }
    }

Logcat:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.foodstationapp/com.example.foodstationapp.activities.RegisterActivity}: java.io.FileNotFoundException: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20200527-WA0000.jpg: open failed: EACCES (Permission denied)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:4905)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:4946)
    at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2040)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:224)
    at android.app.ActivityThread.main(ActivityThread.java:7520)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.io.FileNotFoundException: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20200527-WA0000.jpg: open failed: EACCES (Permission denied)
    at libcore.io.IoBridge.open(IoBridge.java:496)
    at java.io.FileInputStream.<init>(FileInputStream.java:159)
    at java.io.FileInputStream.<init>(FileInputStream.java:115)
    at android.media.ExifInterface.initForFilename(ExifInterface.java:2297)
    at android.media.ExifInterface.<init>(ExifInterface.java:1386)
    at id.zelory.compressor.ImageUtil.decodeSampledBitmapFromFile(ImageUtil.java:60)
    at id.zelory.compressor.ImageUtil.compressImage(ImageUtil.java:33)
    at id.zelory.compressor.Compressor.compressToFile(Compressor.java:60)
    at id.zelory.compressor.Compressor.compressToFile(Compressor.java:56)
    at com.example.foodstationapp.activities.RegisterActivity.onActivityResult(RegisterActivity.kt:268)
    at android.app.Activity.dispatchActivityResult(Activity.java:8249)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:4898)
    ... 11 more
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
    at libcore.io.Linux.open(Native Method)
    at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
    at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
    at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7419)
    at libcore.io.IoBridge.open(IoBridge.java:482)
    ... 22 more
android android-permissions android-bitmap
1个回答
0
投票

[随着每个新的Android版本,Google都使使用Java- File类变得更加困难/不可能。 Google希望您将contentprovider与InputStreamOutputStream一起使用。

如果从图库或图像选择器中获取崩溃堆栈跟踪的照片“ / storage / emulated / 0 / WhatsApp / Media / WhatsApp Images / IMG-20200527-WA0000.jpg”,请使用原始的“内容:... 。“ uri并通过

加载图像

context.getContentResolver()。openInputStream(contentUri);


更新:

库'com.fxn769:pix'= https://github.com/akshay2211/PixImagePicker。目前在android-10上无法正常使用:请参见https://github.com/akshay2211/PixImagePicker/issues/103

[从android-4.4开始的android方式选择图像是

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),
       PICK_IMAGE);

您可以通过contentresolver打开的onActivityResult中的“ content:-uri”]

© www.soinside.com 2019 - 2024. All rights reserved.