Как переместить файл из активов в Inetrenal Storage в Android Q - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь скопировать файл с помощью android studio и пробовал это, но это не сработало .... может кто-нибудь предложить ошибку, из-за которой я застрял, или предложить мне другой метод для работы с ним .... ниже приведена функция, которая будет программно перемещать ваш файл; ниже - это функция, которая будет программно перемещать ваш файл; ниже - это функция, которая будет программно перемещать ваш файл; ниже - это функция, которая будет программно перемещать ваш файл; ниже - это функция, которая будет программно перемещать ваш файл; будет программно перемещать ваш файл, ниже приведена функция, которая будет программно перемещать ваш файл пакета com.example.ringtone;

   public class MainActivity extends AppCompatActivity {
      Button button ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button=findViewById(R.id.button);
    checkDiskPermission();
    button.setOnClickListener(new View.OnClickListener() {


        public void onClick(View v) {
            copyraw("pink_panther.mp3");


            copyFiletoExternalStorage(R.raw.pink_panther,"pink.mp3");

        }


    });
}
private void checkDiskPermission ()
{
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=                                        
    else
    {
        Toast.makeText(this, "Has Permissions" , Toast.LENGTH_LONG).show();
    }
 }

 private void copyraw(String filename){
    String dirpath= (getExternalFilesDir(null)).getAbsolutePath() + filename;
    File dir = new File(dirpath);
    if (dir.exists()){
        dir.delete();

    }else{
        AssetManager assetManager=getAssets();
        OutputStream out =null;
        InputStream in = null;
        try {
            in=assetManager.open(filename);
            File outfile= new File(dirpath,filename);
            out =new FileOutputStream(outfile);
            copyfile(in ,out);
            Toast.makeText(MainActivity.this,"File Copied ",Toast.LENGTH_SHORT).show();


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this,"Failed",Toast.LENGTH_SHORT).show();
        }finally {
            if (in != null){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (out != null){
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}




private void copyFiletoExternalStorage(int resourceId, String resourceName){
    String pathSDCard ;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        pathSDCard = getExternalFilesDir(null).getAbsolutePath() + resourceName ;
        Toast.makeText(this,pathSDCard,Toast.LENGTH_SHORT).show();
    } else {
        pathSDCard = Environment.getExternalStorageDirectory() + "/Android/data/" + resourceName;
    }
    try{
        InputStream in = getResources().openRawResource(resourceId);
        FileOutputStream out = null ;
        out = new FileOutputStream(pathSDCard);
        byte[] buff = new byte[1024];
        int read = 0;
        try {
            while ((read = in.read(buff)) > 0) {
                out.write(buff, 0, read);
            }
        } finally {
            in.close();
            out.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
private void copyfile(InputStream in , OutputStream out ) throws IOException{
    byte[] buffer = new byte[1024];
    int read ;
    while((read=in.read(buffer)) != 1){
        out.write(buffer,0,read);
    }

}

}

...