La méthode setActualDefaultRingtoneUri(Context, int, Uri) dans le type RingtoneManager n'est pas applicable pour les arguments OnItemClickListener
-
21-12-2019 - |
Question
Je crée une application Android et je souhaite, lorsque je clique sur un élément d'affichage de liste, trouver l'ID de l'élément cliqué, obtenir des ressources et définir ce fichier comme sonnerie. Cependant, j'obtiens cette erreur :La méthode setActualDefaultRingtoneUri(Context, int, Uri)
dans le genre RingtoneManager
n'est pas applicable pour les arguments (new AdapterView.OnItemClickListener
)
Comment puis-je réparer cela?
listv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String selectedName = ((ListView) view.findViewById(R.id.listView1)).getContext()
.toString();
AssetManager assetManager = getAssets();
File file = new File(Environment.getExternalStorageDirectory(),
"/myRingtonFolder/Audio/");
if (!file.exists()) {
file.mkdirs();
}
String path = Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/MyRingtones/Audio/";
File out = new File(path + "/", selectedName);
if (!out.exists()) {
try {
copyFile(assetManager, "Ringtone.mp3", out);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, out.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "airh");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.MediaColumns.SIZE, out.length());
values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
values.put(MediaStore.Audio.Media.IS_ALARM, true);
values.put(MediaStore.Audio.Media.IS_MUSIC, true);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(out.getAbsolutePath());
ContentResolver mCr = getContentResolver();
Uri newUri = mCr.insert(uri, values);
try {
RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE,
newUri);
Settings.System.putString(mCr, Settings.System.RINGTONE,
newUri.toString());
} catch (Throwable t) {
//TODO Handle exception
}
switch (position) {
case 0:
if (mp != null) {
mp.release();
mp = null;
}
mp = MediaPlayer.create(Context.this,
R.raw.aint);
mp.start();
break;
case 1:
if (mp != null) {
mp.release();
mp = null;
}
mp = MediaPlayer.create(Context.this,
R.raw.airh);
mp.start();
break;
}
}
});
La solution
Vous êtes dans le OnItemClickListener
interface donc this
y fera référence.
Pour éviter cela, placez simplement le nom de votre activité avant cela ou demandez le contexte à getApplicationContext()
Comme:
RingtoneManager.setActualDefaultRingtoneUri(
MainActivity.this, RingtoneManager.TYPE_RINGTONE, newUri);
ou
RingtoneManager.setActualDefaultRingtoneUri(
getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);
faire de même pour MediaPlayer.create(MainActivity.this, R.raw.aint);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow