无法在Android的外部存储中修改文件

时间:2019-01-26 17:38:43

标签: android android-external-storage

请帮助我...我得到了

  

java.io.FileNotFoundException:/存储/'我的外部存储'/音乐/'文件名':打开失败:EACCES(权限被拒绝)

当我使用jaudiotagger修改位于SD卡中的音乐的ID3标签时。

我已经在清单文件上写了读/写权限,并写了请求方法,许可请求结果回调方法和这样的按钮单击按钮时修改标签的部分。

private void requestExternalStoragePermissions() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "Permission granted to write your External storage", Toast.LENGTH_SHORT).show();
            start();
        }
        else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        }
    }

}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 1 : {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0&&grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
                start();
            }
            else {
                Toast.makeText(this, "Permission denied to access your External storage", Toast.LENGTH_SHORT).show();
            }
            return;
        }
    }
}

savebutton.setOnClickListener(new Button.OnClickListener(){
        @Override
        public void onClick(View view){
            try{
                AudioFile f = AudioFileIO.read(file);
                Tag tag = f.getTag();
                tag.setField(FieldKey.TITLE,editText1.getText().toString());
                tag.setField(FieldKey.ALBUM,editText2.getText().toString());
                tag.setField(FieldKey.ARTIST,editText3.getText().toString());
                tag.setField(FieldKey.ALBUM_ARTIST,editText4.getText().toString());
                tag.setField(FieldKey.YEAR,editText5.getText().toString());
                tag.setField(FieldKey.DISC_NO,editText6.getText().toString());
                tag.setField(FieldKey.TRACK,editText7.getText().toString());
                tag.setField(FieldKey.LYRICS,editText8.getText().toString());
                f.commit();
                Toast.makeText(getApplicationContext(), "Tag Saved", Toast.LENGTH_SHORT).show();
            } catch(Exception e){
                e.printStackTrace();
            }
        }
    });

我该如何解决?

1 个答案:

答案 0 :(得分:0)

在Android 4.4及更高版本中,无法再在SD卡上编辑文件。我遇到了同样的问题。

唯一的解决方法是将文件复制到内部存储,对其进行修改然后再移回。