Die Methode setActualDefaultRingtoneUri(Context, int, Uri) im Typ RingtoneManager ist für die Argumente OnItemClickListener nicht anwendbar

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

Frage

Ich erstelle eine Android-Anwendung und möchte, wenn ich auf ein Listenansichtselement klicke, die ID des angeklickten Elements finden, Ressourcen abrufen und diese Datei als Klingelton festlegen. Allerdings erhalte ich diese Fehlermeldung:Die Methode setActualDefaultRingtoneUri(Context, int, Uri) im Typ RingtoneManager gilt nicht für die Argumente (new AdapterView.OnItemClickListener)

Wie kann ich das beheben?

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;
        }
    }
});
War es hilfreich?

Lösung

Du bist innerhalb der OnItemClickListener Schnittstelle also this werde darauf verweisen.

Um dies zu vermeiden, platzieren Sie einfach den Namen Ihrer Aktivität davor oder fragen Sie getApplicationContext() nach dem Kontext

Wie:

RingtoneManager.setActualDefaultRingtoneUri(
     MainActivity.this, RingtoneManager.TYPE_RINGTONE, newUri);

oder

RingtoneManager.setActualDefaultRingtoneUri(
     getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);

mach das Gleiche für MediaPlayer.create(MainActivity.this, R.raw.aint);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top