如何通过服务将文件复制到SD卡? (没有权限 )

时间:2019-05-26 06:50:16

标签: java android service android-permissions

我正在创建应用程序,以将一些照片从手机内部存储复制到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);
}

0 个答案:

没有答案