تعیین یک فایل صوتی موجود در حافظه خارجی (External Storage) به عنوان زنگ گوشی (Ringtone)، در برنامه نویسی اندروید
چنانچه بخواهیم یک فایل صوتی (مثلا mp3) موجود در حافظه خارجی (External Storage) را به عنوان زنگ گوشی (Ringtone) تعیین کنیم، قبل از هر چیز، باید اجازه های دسترسی زیر را به فایل AndroidManifest.xml از پروژه اندروید، اضافه کنیم :
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission>
دو اجازه اول، مربوط به خواندن و نوشتن در حافظه خارجی (External Storage) می باشد که هر زمان با حافظه خارجی سر و کار داریم، باید حتما آنها را ذکر کنیم. اجازه سوم نیز مربوط به تغییر تنظیمات گوشی می باشد.
اکنون فرض می کنیم که فایل صوتی مورد نظرمان دارای نام myFile.mp3 می باشد و در پوشه ای با نام myFolder در حافظه خارجی قرار دارد. اکنون برای تعیین آن فایل صوتی به عنوان زنگ گوشی (Ringtone)، کدهای زیر را می نویسیم (کدهایی که در Activity می نویسیم) :
File dir = new File (root.getAbsolutePath() + "/myFolder");
String filename = "myFile.mp3";
File k = new File(dir, filename);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "myRingtonTitle");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
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);
//Insert it into the database
Uri newUri= this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values);
RingtoneManager.setActualDefaultRingtoneUri(
this,
RingtoneManager.TYPE_RINGTONE,
newUri
);
در کدهای بالا، نام myRingtonTitle را به عنوان نام آهنگ مورد نظرمان انتخاب کرده ایم که در لیست آهنگ های قابل انتخاب برای زنگ گوشی، با این نام نمایش داده می شود. همچنین نوع فایل را نیز به صورت mp3 تعیین کرده ایم که در صورت دلخواه، می توان آن را تغییر داد (با نوشتن علامت * می توان همه انواع فایل های صوتی معتبر را در نظر گرفت).
پس از اجرای کدهای بالا، اگر به تنظیمات گوشی اندروید مراجعه کنید، مشاهده خواهید کرد که آن آهنگ مورد نظرتان، به عنوان زنگ گوشی (Ringtone) تعیین شده است (با همان نامی که برای آن تعیین کردیم) :
اگر کدهایی که شرح دادیم، دو یا چند بار اجرا شوند، آنگاه تعداد دو یا چند بار، زنگ با عنوان myRingtonTitle به لیست زنگ ها افزوده می شود، برای رفع این مشکل، کدها را به گونه ای می نویسیم که ابتدا اگر زنگ مورد نظر در لیست زنگ ها وجود دارد، حذف شده و سپس آن را به لیست زنگ ها اضافه می کنیم. بنابراین کدها را به صورت زیر تغییر می دهیم :
File dir = new File (root.getAbsolutePath() + "/myFolder");
String filename = "myFile.mp3";
File k = new File(dir, filename);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "myRingtonTitle");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
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);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);
Uri newUri = getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(getApplication(),
RingtoneManager.TYPE_RINGTONE, newUri);