2016-11-04 3 views
1

У меня есть две кнопки в моем приложении. Один для установки звукового файла в качестве мелодии звонка, а другой - для уведомления. Я могу установить звуковой файл в качестве мелодии звонка, но когда я пытаюсь установить его как уведомление, он удаляет мелодию звонка, которую я ранее добавил. Звуковой файл отображается только как уведомление. Я хочу установить звуковой файл как для мелодии звонка, так и для уведомления через отдельные кнопки.Установите звуковой файл в качестве мелодии звонка и оповещения программно в Android

Код для рингтона:

File k = new File(baseDir,fileName); 
ContentValues values = new ContentValues(); 

values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
values.put(MediaStore.MediaColumns.TITLE, "Voicetransform "); 

values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/wav"); 
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, 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()); 
context.getContentResolver().delete(
uri, 
MediaStore.MediaColumns.DATA + "=\"" 
     + k.getAbsolutePath() + "\"", null); 
Uri newUri = context.getContentResolver().insert(uri, values); 

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

} 

Код для уведомления:

ContentValues values = new ContentValues(); 
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
values.put(MediaStore.MediaColumns.TITLE, "Voicetransform1"); 
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/wav"); 
values.put(MediaStore.MediaColumns.SIZE, k.length()); 
values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name); 
values.put(MediaStore.Audio.Media.IS_RINGTONE, false); 
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()); 
context.getContentResolver().delete(
    uri, 
    MediaStore.MediaColumns.DATA + "=\"" 
     + k.getAbsolutePath() + "\"", null); 
Uri newUri = context.getContentResolver().insert(uri, values); 

try { 
    RingtoneManager.setActualDefaultRingtoneUri(
     context, RingtoneManager.TYPE_NOTIFICATION,newUri); 
} catch (Throwable t) { 

} 

File k = new File(baseDir,fileName); 

ответ

0

Попробуйте этот фрагмент и получить красный от Ringtone Настройка

public boolean setAsRingtone(String filePath) { 
    // this function is use to On or Off Default Ringtone 
    String[] files = { filePath }; 
     MediaScannerConnection.scanFile(context, files, null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        @Override 
        public void onScanCompleted(String path, Uri uri) { 
         System.out.println("Ringtone file " + path + " was scanned seccessfully: " + uri); 
         if(path!=null&&!path.isEmpty()){ 
          try { 
           RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, uri); 
          } catch (Throwable t) { 

          } 
         }else { 
          String defaultPath = Settings.System.DEFAULT_RINGTONE_URI.getPath(); 
          File newSoundFile = new File(defaultPath); 
          Uri newUri = MediaStore.Audio.Media.getContentUriForPath(newSoundFile.getAbsolutePath()); 
          try { 
           RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, newUri); 
          } catch (Throwable t) {} 
         } 
        } 
       } 
     ); 

     Toast.makeText(context, "Ringtone has been set successfully", Toast.LENGTH_SHORT).show(); 

     return true; 
} 
0

попробовать этот

public void setNoti() { 
     File file = new File(Environment.getExternalStorageDirectory(), 
       "/Your Directory"); 
     if (!file.exists()) { 
      file.mkdirs(); 
     } 

     String path = Environment.getExternalStorageDirectory() 
       .getAbsolutePath() + "/Your Directory"; 

     File f = new File(path + "/", filename + ".mp3"); 

     Uri mUri = Uri.parse("android.resource://" + getContext().getPackageName() + "/raw/" + filename); 
     ContentResolver mCr = getContext().getContentResolver(); 
     AssetFileDescriptor soundFile; 
     try { 
      soundFile = mCr.openAssetFileDescriptor(mUri, "r"); 
     } catch (FileNotFoundException e) { 
      soundFile = null; 
     } 

     try { 
      byte[] readData = new byte[1024]; 
      FileInputStream fis = soundFile.createInputStream(); 
      FileOutputStream fos = new FileOutputStream(f); 
      int i = fis.read(readData); 

      while (i != -1) { 
       fos.write(readData, 0, i); 
       i = fis.read(readData); 
      } 

      fos.close(); 
     } catch (IOException io) { 
     } 

     ContentValues values = new ContentValues(); 
     values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath()); 
     values.put(MediaStore.MediaColumns.TITLE, name1); 
     values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
     values.put(MediaStore.MediaColumns.SIZE, f.length()); 
     values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name); 
     values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 


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

     try { 
      RingtoneManager.setActualDefaultRingtoneUri(getContext(), 
        RingtoneManager.TYPE_NOTIFICATION, newUri); 
      Settings.System.putString(mCr, Settings.System.NOTIFICATION_SOUND, 
        newUri.toString()); 
      Toast.makeText(getContext(), "Done", Toast.LENGTH_SHORT).show(); 

     } catch (Throwable t) { 

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