La méthode setActualDefaultRingtoneUri(Context, int, Uri) dans le type RingtoneManager n'est pas applicable pour les arguments OnItemClickListener

StackOverflow https://stackoverflow.com//questions/22007927

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;
        }
    }
});
Était-ce utile?

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
scroll top