简体   繁体   English

三星s8和s9中的Android外部写入权限问题

[英]Android External write permission issue in samsung s8 and s9

I have a downloader class in my app that handles downloading new apk from the server into user android devices, to update the app. 我的应用程序中有一个downloader类,该类处理从服务器将新apk下载到用户android设备中以更新应用程序。 the whole module works great and grants read-write permission and download and installs the apk with no issue. 整个模块运行良好,并授予读写权限,下载并安装apk没问题。 The only problem is with Galaxy s9 and Galaxy s8 with version 8.0.0, I'm experiencing permission denied exception for external storage. 唯一的问题是版本为8.0.0的Galaxy s9和Galaxy s8,我遇到了外部存储权限被拒绝的异常。 I have tested it with multiple device and SDKs , nexus, nexus 5x, zte, sony Xperia. 我已经使用多种设备和SDK,nexus,nexus 5x,zte,sony Xperia对它进行了测试。 But It looks like only effects Galaxy S8 and S9. 但这似乎只影响银河S8和S9。

Error 错误

No permission to write to /storage/emulated/0/Download/app-release.apk: Neither user 10390 nor current process has android.permission.WRITE_EXTERNAL_STORAGE. 没有写入/storage/emulated/0/Download/app-release.apk的权限:用户10390或当前进程都没有android.permission.WRITE_EXTERNAL_STORAGE。

Update activity code 更新活动代码

    void downloadOrCancel() {

        if (downloader != null && downloader.isDownloading()) {
             cancel();
         } else {
            download();
         }
        //  updateUi();
    }

    private void cancel() {
        if(downloader != null)
                  downloader.cancel();
    }

    private void download() {
        //   Uri uri = Uri.parse(url);
        downloader = Downloader.newInstance(this);
        downloader.download(URL_APK);
    }


    private void checkPErmissions(){
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(this,
                Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    12);
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    13);

        } else {
            downloadOrCancel();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 12:
            case 13: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] ==
                        PackageManager.PERMISSION_GRANTED) {
                    // get locations
                    checkPErmissions();
                } else {
                    //Close it
                    finish();
                }
            }
            break;
        }
    }

Manifest permissions 清单权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permissionandroid:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS" />

I looked up some stuff on your code, but everything seems fine to me. 我在您的代码中查找了一些内容,但对我来说一切似乎都很好。 I post this as an answer because it's too long for a comment. 我将其发布为答案,因为评论太久了。

The last thing I can suggest is because it happens only on Samsung S8 and S9, maybe it has something to do with the permission to install/download files from unknown sources. 我可以建议的最后一件事是因为它仅发生在Samsung S8和S9上,也许与许可从未知来源安装/下载文件有关。 In your Samsung go to: 在您的三星中:

Settings --> Locked Screen and Security --> Install unknown apps Settings -> Locked Screen and Security -> Install unknown apps

And try to turn it on for your application. 并尝试为您的应用程序打开它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM