2016-11-30 2 views
0

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

private void setRingtone(Uri uri) { 
     AssetFileDescriptor openAssetFileDescriptor; 
     ((AudioManager) getActivity().getSystemService(AUDIO_SERVICE)).setRingerMode(2); 
     File file = new File(Environment.getExternalStorageDirectory() + "/appkeeda", mp3s[position]); 
     if (!file.getParentFile().exists()) { 
      file.getParentFile().mkdirs(); 
     } 
     if (!file.exists()) { 
      try { 
       file.createNewFile(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     ContentResolver contentResolver = getActivity().getContentResolver(); 
     try { 
      openAssetFileDescriptor = contentResolver.openAssetFileDescriptor(uri, "r"); 
     } catch (FileNotFoundException e2) { 
      openAssetFileDescriptor = null; 
     } 
     try { 
      byte[] bArr = new byte[1024]; 
      FileInputStream createInputStream = openAssetFileDescriptor.createInputStream(); 
      FileOutputStream fileOutputStream = new FileOutputStream(file); 
      for (int read = createInputStream.read(bArr); read != -1; read = createInputStream.read(bArr)) { 
       fileOutputStream.write(bArr, 0, read); 
      } 
      fileOutputStream.close(); 
     } catch (IOException e3) { 
      e3.printStackTrace(); 
     } 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("_data", file.getAbsolutePath()); 
     contentValues.put("title", "nkDroid ringtone"); 
     contentValues.put("mime_type", "audio/mp3"); 
     contentValues.put("_size", Long.valueOf(file.length())); 
     contentValues.put("artist", Integer.valueOf(R.string.app_name)); 
     contentValues.put("is_ringtone", Boolean.valueOf(true)); 
     contentValues.put("is_notification", Boolean.valueOf(false)); 
     contentValues.put("is_alarm", Boolean.valueOf(false)); 
     contentValues.put("is_music", Boolean.valueOf(false)); 
     try { 
      //Toast.makeText(this, new StringBuilder().append("Ringtone set successfully"), Toast.LENGTH_LONG).show(); 
      RingtoneManager.setActualDefaultRingtoneUri(getActivity().getBaseContext(), 1, contentResolver.insert(MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath()), contentValues)); 
     } catch (Throwable th) { 
      //Toast.makeText(this, new StringBuilder().append("Ringtone feature is not working"), Toast.LENGTH_LONG).show(); 
     } 
    } 
+0

см http://stackoverflow.com/questions/1271777/how-to-set-ringtone-in-android-from-my-activity – sasikumar

+0

не работает, но спасибо, я думаю, что код может быть устаревшим –

ответ

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