سؤال

أحاول معرفة كيفية أخذ ملف صوتي من مجلد الأصول (مدرج على أنه Androidasset) وإضافته إلى قائمة نغمات الرنين التي تراها عند إجراء هذه المكالمة:

this.StartActivity(new Intent(Android.Media.RingtoneManager.ActionRingtonePicker));

أقوم بإضافة نغمة الرنين عبر هذه المكالمة:

InputStream inputstream = Assets.Open("filename.mp3");

هل يعرف أحد كيف يتم إنجاز هذا؟ لقد كنت أبحث في كل مكان ولم أحسب ذلك. شكرًا لك

هل كانت مفيدة؟

المحلول

شيء من هذا القبيل:

private void setAsRingtone(){
        try {
            //Open the InputStream from the Assets
            InputStream fis = Assets.Open("filename.mp3");
            if (fis == null)
                return;

            //Open a File to save the ringtone in the SD (/sdcard/Android/data/com.your.package/)
            File path = new
            File(Environment.getExternalStorageDirectory().getAbsolutePath() +
            "/Android/data/com.your.package/");
            if(!path.exists())
                path.mkdirs();

            //Create the proper file
            File f = new File(path, "YourTitle" + ".mp3");

            //Dump the InputStream in the File
            OutputStream fos = new FileOutputStream(f);
            byte[] buf =new byte[1024];
            int len;
            while((len=fis.read(buf))>0){
                fos.write(buf,0,len);
            }
            fos.close();
            fis.close();

            //Here are the metadata of the ringtone
            ContentValues values = new ContentValues();
            values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath());
            values.put(MediaStore.MediaColumns.TITLE, "YourTitle");
            values.put(MediaStore.MediaColumns.SIZE, f.length());
            values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
            values.put(MediaStore.Audio.Media.ARTIST, "YourArtist");
            //values.put(MediaStore.Audio.Media.DURATION, ""); This is not needed
            values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
            values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
            values.put(MediaStore.Audio.Media.IS_ALARM, false);
            values.put(MediaStore.Audio.Media.IS_MUSIC, false);

            //We put in the DDBB of MediaStore
            Uri uri =
                MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath());
            Uri newUri = getBaseContext().getContentResolver().insert(uri, values);

            //Set as default
                RingtoneManager.setActualDefaultRingtoneUri(
                        getBaseContext(),
                        RingtoneManager.TYPE_RINGTONE,
                        newUri);

        } catch (FileNotFoundException e) {
        } catch (IOException e) {
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top