Как скопировать файл на SD-карту через сервис?(доступ запрещен ) - PullRequest
0 голосов
/ 26 мая 2019

Я создаю приложение для копирования некоторых фотографий из внутреннего хранилища телефона на SD-карту. К сожалению, я все еще получаю разрешение на отказ, хотя я установил свой манифест, добавить запрос на разрешение на запуск приложения, но все еще ничего. Кто-нибудь видит что-то, чего я здесь не хватает? пытается скопировать в SD-камеру по умолчанию местоположение

Сервис Dees требует каких-то настроек разрешений? или что?

файл манифеста:

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

обслуживание:

    runnable = new Runnable() {
        public void run() {
            Toast.makeText(context, "Service is still running", Toast.LENGTH_LONG).show();
            handler.postDelayed(runnable, 10000);
                File source = new File("/storage/emulated/0/DCIM/Camera/aasource.jpg");
                File destination = new File ("/storage/0000-0000/DCIM/Camera/aa.jpg");
                try {
                    copyFile(source,destination);
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    };

метод copyFile:

public void copyFile(File src, File dst) throws IOException {
    FileInputStream inStream = new FileInputStream(src);
    FileOutputStream outStream = new FileOutputStream(dst);
    FileChannel inChannel = inStream.getChannel();
    FileChannel outChannel = outStream.getChannel();
    inChannel.transferTo(0, inChannel.size(), outChannel);
    inStream.close();
    outStream.close();
}

установка разрешений при запуске приложения:

private void showWriteExternal() {
    int permissionCheck = ContextCompat.checkSelfPermission(
            this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            showExplanation("Permission Needed", "Rationale", Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_PERMISSION_WRITE_SD);
        } else {
            requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_PERMISSION_WRITE_SD);
        }
    } else {
        Toast.makeText(MainActivity.this, "Permission (already) Granted!", Toast.LENGTH_SHORT).show();
    }
}


@Override
public void onRequestPermissionsResult(
        int requestCode,
        String permissions[],
        int[] grantResults) {
    switch (requestCode) {
        case REQUEST_PERMISSION_WRITE_SD:
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(MainActivity.this, "Permission Granted!", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "Permission Denied!", Toast.LENGTH_SHORT).show();
            }
    }
}

private void showExplanation(String title,
                             String message,
                             final String permission,
                             final int permissionRequestCode) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(title)
            .setMessage(message)
            .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    requestPermission(permission, permissionRequestCode);
                }
            });
    builder.create().show();
}

private void requestPermission(String permissionName, int permissionRequestCode) {
    ActivityCompat.requestPermissions(this,
            new String[]{permissionName}, permissionRequestCode);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...