تغییر صدای زنگ گوشی با کد !
سلام دوستان بعد از کلی تلاش و جستجو بلاخره تونستم صدای زنگ رو از داخل برنامه تغییر بدم ! :D
گفتم اینجا بزارم تا دوستان هم استفاده کنن!
لطفا با لایک همراهی کنید !
خیلی کار سختی نیست و کلا تو کد مشخصه که چکار باید بکنید من این کد رو داخل یک دکمه استفاده کردم هرجاش مشکل داشتید بگید!
Button btn1 = (Button) findViewById(R.id.btn1); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub String filename = "yes.mp3";
File k = new File(G.DIR_PATH, filename); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "yes"); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); values.put(MediaStore.Audio.Media.ARTIST, ""); 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 uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); Uri newUri = getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(SoundActivity.this, RingtoneManager.TYPE_RINGTONE, newUri); } });



دوست عزیز کدی که در بالا استفاده کردید کار میکنه ، ولی اگر گوشی رو ریست کنید رینگتون عوض میشه ، برای حل این مشکل فقط یک راه هست اونم اینه که رینگتون رو ابتدا در آدرس :
Environment.getExternalStorageDirectory() + "/media/" + fileName
کپی کنید ، و بعد دستورات ست کردن رینگتون که گفتید رو انجام بدید

دوستان من این کدو تو گوشی وقتی اجرا میکنم برنامه دیگه نمیتونه ادامه بده بسته میشه.مشکل از کجاست.کد تقریبا شبیه به کد لینک بالاست.
btnringtone.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
File k = new File(G.DIR_APP, item.musicname+ ".mp3");
if (k.exists()) {
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "" + item.musicname+ ".mp3");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.MediaColumns.SIZE, k.length());
values.put(MediaStore.Audio.Media.ARTIST, "avida ");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, true);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
G.context.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);
Uri newUri = G.currentActivity.getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(G.context, RingtoneManager.TYPE_RINGTONE, newUri);
Toast.makeText(G.context, "زنگ تماس شما با موفقیت تغیر یافت.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(G.context, "فایل در حافظه شما موجود نمی باشد!", Toast.LENGTH_SHORT).show();
}
}
});

تو جنیموشن که خطا نمیده.تو گوشی خطا میده که نمیشه خطا رو خوند. ولی وقتی این تیکه از کدو برمیدارم دیگه خطا نمیده ولی زنگ گوشی هم تغییر نمیکنه.
Uri newUri = G.currentActivity.getContentResolver().insert(uri, values);

Writing exception to parcel
java.lang.SecurityException: Permission Denial: writing com.android.providers.settings.SettingsProvider uri content://settings/system from pid=7027, uid=10041 requires android.permission.WRITE_SETTINGS
at android.content.ContentProvider$Transport.enforceWritePermission(ContentProvider.java:349)
at android.content.ContentProvider$Transport.insert(ContentProvider.java:188)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:152)
at android.os.Binder.execTransact(Binder.java:338)
at dalvik.system.NativeStart.run(Native Method)
FATAL EXCEPTION: main
java.lang.SecurityException: Permission Denial: writing com.android.providers.settings.SettingsProvider uri content://settings/system from pid=7027, uid=10041 requires android.permission.WRITE_SETTINGS
at android.os.Parcel.readException(Parcel.java:1327)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:182)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:136)
at android.content.ContentProviderProxy.insert(ContentProviderNative.java:415)
at android.content.ContentResolver.insert(ContentResolver.java:730)
at android.provider.Settings$NameValueTable.putString(Settings.java:639)
at android.provider.Settings$System.putString(Settings.java:835)
at android.media.RingtoneManager.setActualDefaultRingtoneUri(RingtoneManager.java:656)
at jigsaw.avida.websampel.MynoheList$ViewHolder$4.onClick(MynoheList.java:196)
at android.view.View.performClick(View.java:3511)
at android.view.View$PerformClick.run(View.java:14105)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
channel '414f8c88 jigsaw.avida.websampel/jigsaw.avida.websampel.Activitymain (server)' ~ Channel is unrecoverably broken and will be disposed!
Received spurious receive callback for unknown input channel. fd=208, events=0x8
تو امولیتور اجرا کردم.این خطارو میده.

هر کاری کردم نتونستم بالا بنوسم.شرمنده.
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
در آخر با این مجوز و اظافه کردن این تیکه از کد.برنامه به درستی کار کرد:)
G.currentActivity.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + adres + "\"", null);
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .