je reçois une chanson de la bibliothèque de l'utilisateur comme ceci:copie audio de uri dans le répertoire spécifique
Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT);
selectIntent.setType("audio/*");
startActivityForResult(selectIntent, SONG_REQUEST_CODE);
et récupérer comme ceci:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SONG_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
if ((data != null) && (data.getData()!=null)) {
song = data.getData(); //song is an Uri defined previuosly
}
}
}
Je dois importer dans un dossier I défini et créé comme ceci:
final File dir2 = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Chords/Imported Audio");
dir2.mkdirs();
J'ai essayé comme cela comme suggéré par Commonsware mais le fichier est pas créé:
private void importAudio(Uri uri) {
String source = uri.getPath();
String destinationFile = dir2 + File.separator + songName;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(source));
bos = new BufferedOutputStream(new FileOutputStream(destinationFile, false));
byte[] buf = new byte[1024];
bis.read(buf);
do {
bos.write(buf);
} while (bis.read(buf) != -1);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bis != null) bis.close();
if (bos != null) bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Le fichier n'existe pas cependant. Comment puis-je réparer cela?
Merci pour la réponse, je vais le faire en utilisant 'InputStream '. Juste par curiosité, à quoi sert la méthode 'getPath()' dans l'objet 'Uri'? Basé également sur les autres questions ici sur SO, il me semble que c'est une méthode vraiment déroutante et je n'arrive toujours pas à comprendre comment et quand l'utiliser. Merci aussi pour l'astuce de l'indixe qui va être utile et je ne le savais pas – Daniele
@Daniele: "Juste par curiosité, à quoi sert la méthode getPath() dans l'objet Uri?" - si le schéma est 'fichier', il s'agit d'un chemin de système de fichiers. Si le schéma est autre chose, c'est une série de caractères dont la signification est opaque pour vous. Par exemple, 'https: // stackoverflow.com/questions/46241361/android-copy-audio-from-uri-to-specific-directory/46241452' est un' Uri'. Son schéma est 'https'. Son chemin est '/ questions/46241361/android-copy-audio-from-uri-to-specific-directory/46241452', et ce n'est qu'une série de caractères qui n'a aucun sens pour votre application. – CommonsWare
oh je vois, merci pour la clarification – Daniele