2015-03-25 3 views
1

Я хочу осуществить набор мелодии для моего приложения, после записи voice.Ringtone будет установлена ​​правильно только один раз, когда он будет установлен в качестве мелодии звонка, а снова установить ее не работает должным образом здесь я добавил мой код:Android рингтон установлен программно?

String filepath ="/sdcard/sample/"+currentName+""; 
          System.out.println("/sdcard/sample/"+currentName+""); 


          File ringtoneFile = new File(filepath); 

          ContentValues content = new ContentValues(); 
          content.put(MediaStore.MediaColumns.DATA,ringtoneFile.getAbsolutePath()); 
          content.put(MediaStore.MediaColumns.TITLE, currentName); 
          content.put(MediaStore.MediaColumns.SIZE, 215454); 
          content.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*"); 
          // content.put(MediaStore.Audio.Media.ARTIST, "Madonna"); 
          content.put(MediaStore.Audio.Media.DURATION, 230); 
          content.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
          content.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
          content.put(MediaStore.Audio.Media.IS_ALARM, true); 
          content.put(MediaStore.Audio.Media.IS_MUSIC, true); 

         String Ringtonepath= "content://media/internal/audio/media/297"; 
          Uri Ringtone1 = Uri.parse(Ringtonepath); 
          //Insert it into the database 
          Log.i("TAG", "the absolute path of the file is :"+ 
            ringtoneFile.getAbsolutePath()); 
          Uri uri = MediaStore.Audio.Media.getContentUriForPath(
            ringtoneFile.getAbsolutePath()); 
          Uri newUri = getContentResolver().insert(uri, content); 
          System.out.println("uri=="+uri); 

          Log.i("TAG","the ringtone uri is :"+newUri); 
          // getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + ringtoneFile.getAbsolutePath() + "\"", 
          //   null); 

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

Моей Ошибка ::

Новая мелодия:

TAG the ringtone uri is :content://media/internal/audio/media/297 

Существующие рингтон:

TAG the ringtone uri is :null 
+0

** Лучшая врезка для установки мелодии здесь ** [Set Ringtone Programatically] (https://stackoverflow.com/questions/40420969/set-a-sound-file-as-ringtone-and-notification-programmatically-in-android/45836076#45836076) –

ответ

5

Перестройте строки кода .. По моему мнению, вы вставляете новый рингтон перед удалением старого. Просто замените приведенный выше код на это.

String filepath ="/sdcard/sample/"+currentName+""; 
          System.out.println("/sdcard/sample/"+currentName+""); 


          File ringtoneFile = new File(filepath); 

          ContentValues content = new ContentValues(); 
          content.put(MediaStore.MediaColumns.DATA,ringtoneFile.getAbsolutePath()); 
          content.put(MediaStore.MediaColumns.TITLE, currentName); 
          content.put(MediaStore.MediaColumns.SIZE, 215454); 
          content.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*"); 
          // content.put(MediaStore.Audio.Media.ARTIST, "Madonna"); 
          content.put(MediaStore.Audio.Media.DURATION, 230); 
          content.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
          content.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
          content.put(MediaStore.Audio.Media.IS_ALARM, true); 
          content.put(MediaStore.Audio.Media.IS_MUSIC, true); 

         String Ringtonepath= "content://media/internal/audio/media/297"; 
          Uri Ringtone1 = Uri.parse(filepath); 
          //Insert it into the database 
          Log.i("TAG", "the absolute path of the file is :"+ 
            ringtoneFile.getAbsolutePath()); 
          Uri uri = MediaStore.Audio.Media.getContentUriForPath(
            ringtoneFile.getAbsolutePath()); 




          getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + ringtoneFile.getAbsolutePath() + "\"", 
             null); 
          Uri newUri = getContentResolver().insert(uri, content); 
          System.out.println("uri=="+uri); 
          Log.i("TAG","the ringtone uri is :"+newUri); 
           RingtoneManager.setActualDefaultRingtoneUri(
             getApplicationContext(), RingtoneManager.TYPE_RINGTONE, 
             newUri); 
+0

Большое спасибо за то, что вы показали мои ошибки. @ Tommy , – Tabi

+0

Привет, в этой строке Uri Ringtone1 = Uri.parse (filepath); оригинал был Uri Ringtone1 = Uri.parse (Ringtonepath); , У меня такая же проблема, мой выбранный рингтон путь String Ringtonepath = "content: // media/internal/audio/media/58"; теперь я хочу установить это как мелодию звонка, но когда я делаю Uri ur = MediaStore.Audio.Media.getContentUriForPath (ringtone.getAbsolutePath()); uri as "content: // media/internal/audio/media – beginner

0

может быть, вы должны удалить его первым, я был пойман в неприятности в течение дня ..

getContentResolver().delete(uri, MediaStore.MediaColumns.DATA 
          + "=\"" + file.getAbsolutePath() + "\"", null); 
Смежные вопросы