2013-10-27 4 views
1

Я хочу установить стандартную мелодию звонка. Когда я запустил код, мой телефон переключился на silent.i, работая над этим в течение 8 часов, но я не могу этого сделать. вот мой код, чтобы установить мелодию звонка.установка мелодии звонка в android не работает

String filepath ="/sdcard/usman.mp3"; 
         File file = new File(filepath); 
          ContentValues values = new ContentValues(); 
          values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath()); 
          values.put(MediaStore.MediaColumns.TITLE, "my ringtone"); 
          values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*"); 
          values.put(MediaStore.MediaColumns.SIZE, file.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, false); 
          values.put(MediaStore.Audio.Media.IS_ALARM, false); 
          values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

          Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath()); 
          Uri newUri = getContentResolver().insert(uri, values); 

          try { 
           RingtoneManager.setActualDefaultRingtoneUri(MainActivity.this, RingtoneManager.TYPE_RINGTONE, newUri); 
          } catch (Throwable t) { 
           Log.d("", "catch exception"); 
          } 

У меня есть все необходимые разрешения для этого.

+0

ли вы получите исключение или вы просто не получаете нужную функциональность? Вы пробовали его на телефоне (если это так) или эмуляторе. Ваш код выглядит нормально по внешнему виду – linakis

+0

Я сделал это на своем телефоне. Samsung Galaxy mini.first, когда моя мелодия изменилась, но когда я снова запустил тот же код, телефон превратился в молчание. ничего не случилось без исключения @bororo –

ответ

1

Ваш код выглядит нормально. Возможно, вам стоит попробовать на самом деле выбрать мелодию звонка с помощью кнопки. Поэтому при нажатии на кнопку, вы сможете установить мелодию с точной траектории файла:

Посмотрите, что вы должны сделать:

Вот мой MainActivity.java, который я использовал

 public class MainActivity extends Activity {  

     @Override 
      public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 
     b2 = (Button) findViewById(R.id.button2); 
     b2.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View arg0) { 

      Intent intent1 = new Intent(); 
       intent1.setAction(Intent.ACTION_GET_CONTENT); 
       intent1.setType("audio/*"); 
       startActivityForResult(Intent.createChooser(intent1, "Choose Sound File"), 6); 



      } 

     }); 

      } 




    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(resultCode ==RESULT_OK&&requestCode==6){ 
    Uri i = data.getData(); //getDATA 
    String s = = i.getPath(); //getPath 
    File k = new File(s); //set File from path 

if(s!=null){ //(file.exists 

    ContentValues values = new ContentValues(); 
     values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
     values.put(MediaStore.MediaColumns.TITLE, "ring"); 
     values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
     values.put(MediaStore.MediaColumns.SIZE, k.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, false); 

     Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); 
     getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); 
    Uri newUri = getContentResolver().insert(uri, values); 


     try { 
      RingtoneManager.setActualDefaultRingtoneUri(MainActivity.this, RingtoneManager.TYPE_RINGTONE, newUri); 
     } catch (Throwable t) { 

     }  
} 


    } 



    } 



    } 

Вы можете снова проверить необходимые разрешения в своем AndroidManifest.xml

Что вам нужно:

<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" ></uses-permission> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" ></uses-permission> 

Вы можете попробовать мое приложение на Google Play: BackAtel Audio Manager

Надежды, что помогает ....

Смежные вопросы