الطريقة setActualDefaultRingtoneUri(Context, int, Uri) في النوع RingtoneManager غير قابلة للتطبيق على الوسائط OnItemClickListener

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

سؤال

أقوم بإنشاء تطبيق android وأريد عندما أقوم بالنقر فوق عنصر عرض القائمة العثور على معرف العنصر الذي تم النقر عليه والحصول على الموارد وتعيين هذا الملف كنغمة رنين. ومع ذلك، يظهر لي هذا الخطأ:طريقة setActualDefaultRingtoneUri(Context, int, Uri) في النوع RingtoneManager لا ينطبق على الحجج (new AdapterView.OnItemClickListener)

كيف يمكنني اصلاح هذا؟

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;
        }
    }
});
هل كانت مفيدة؟

المحلول

أنت ضمن OnItemClickListener واجهة ذلك this سوف الرجوع إليها.

لتجنب هذا، ما عليك سوى وضع اسم نشاطك قبل ذلك أو اطلب من getApplicationContext() الحصول على السياق

يحب:

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

أو

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

افعل نفس الشيء من أجل MediaPlayer.create(MainActivity.this, R.raw.aint);

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top