Android Froyo configuración ringtone

Escribí un pedazo de código para agregar un tono de llamada de una URL en Android 2.1. En Froyo no quiere trabajar en absoluto.

sendBroadcast(new Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri .fromFile(file))); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, filenameBase); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); values.put(AudioColumns.IS_RINGTONE, true); values.put(AudioColumns.IS_NOTIFICATION, false); values.put(AudioColumns.IS_ALARM, false); values.put(AudioColumns.IS_MUSIC, false); Uri uri = MediaStore.Audio.Media.getContentUriForPath(file .getAbsolutePath()); Uri newUri = RingtoneModule.this.getContentResolver() .insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri( RingtoneModule.this, RingtoneManager.TYPE_RINGTONE, newUri); 

Cuando consigo insertar consigo esta excepción:

 11-17 09:54:51.802: ERROR/DatabaseUtils(379): java.lang.IllegalStateException: Unknown URL: content://media/external/audio/albumart/-1 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at com.android.providers.media.MediaProvider.query(MediaProvider.java:1666) 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at com.android.providers.media.MediaProvider.getAlbumArtOutputUri(MediaProvider.java:2983) 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at com.android.providers.media.MediaProvider.makeThumbInternal(MediaProvider.java:3192) 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at com.android.providers.media.MediaProvider.getThumb(MediaProvider.java:3070) 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:2029) 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1843) 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at android.content.ContentProvider$Transport.insert(ContentProvider.java:180) 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:175) 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at android.os.Binder.execTransact(Binder.java:288) 11-17 09:54:51.802: ERROR/DatabaseUtils(379): at dalvik.system.NativeStart.run(Native Method) 

Yo google mi ** de para este error, pero puede parecer para obtener cualquier información acerca de este error.I miró a la fuente android y el problema parece ser que cuando usted no tiene arte del álbum que genera una url "content: // media / External / audio / albumart / -1 "y el urlmatcher no coincide con ninguna de las urls especificadas y luego lanzaré este error.

 URI_MATCHER.addURI("media", "*/audio/albumart", AUDIO_ALBUMART); URI_MATCHER.addURI("media", "*/audio/albumart/#", AUDIO_ALBUMART_ID); 

¿Alguien tiene alguna idea de cómo puedo evitar eso?

Tuve este error en mi aplicación con un puñado de usuarios, finalmente lo arreglé.

En mi aplicación le dije al escáner de medios de no escanear mis directorios poniendo un archivo en el directorio llamado .nomedia Creo que esto podría haber sido confuso el escáner de medios porque quería usar un archivo desde dentro del directorio.

Por lo tanto, cuando se establece como tono de llamada / notificación / alarma activado, copié el sonido requerido en un directorio llamado / sdcardpath / ringtones / sdcardpath / notifications / sdcardpath / alarmas y luego usé el mismo código para establecer el archivo desde allí.

Esta es la función de copia que hice

  public void ringtonemove(String ringtype){ String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath(); String outpath = sdcard + "/ringtones"; String path = sdcard + "/multi10/" + Global.currentboard + "/series10"; if (ringtype == "MultiboardRing") {outpath = sdcard + "/ringtones/";} if (ringtype == "MultiboardNotif") {outpath = sdcard + "/notifications/";} if (ringtype == "MultiboardAlarm") {outpath = sdcard + "/alarms/";} File in = new File(path, Global.currentsound); File out = new File(outpath, ringtype + ".ogg"); Global.k = outpath + ringtype + ".ogg"; File folderR = new File(Environment.getExternalStorageDirectory() + "/ringtones"); File folderN = new File(Environment.getExternalStorageDirectory() + "/notifications"); File folderA = new File(Environment.getExternalStorageDirectory() + "/alarms"); if (folderR.exists()); else {folderR.mkdir();} if (folderN.exists()); else {folderN.mkdir();} if (folderA.exists()); else {folderA.mkdir();} Log.d("Notice", "Copying sound file " + in); try { FileInputStream fis = new FileInputStream(in); int size = fis.available(); byte[] buffer = new byte[size]; fis.read(buffer); fis.close(); FileOutputStream fos = new FileOutputStream(out); fos.write(buffer); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

Then I set as ringtone con este código:

  public void function1(int id){ Toast.makeText(this, "Set as ringtone" , Toast.LENGTH_SHORT).show(); String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath(); String path = sdcard + "/multi10/" + Global.currentboard + "/series10"; ringtonemove("MultiboardRing"); File k = new File(Global.k); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "MultiboardRing"); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mpeg"); values.put(MediaStore.Audio.Media.ARTIST, "Unknown 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); Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); getContentResolver().insert(uri,values); getContentResolver().delete(uri,MediaStore.MediaColumns.TITLE + "=\"" + "MultiboardRing" +"\"", null); Uri newUri = getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri( series10button.this, RingtoneManager.TYPE_RINGTONE, newUri); } 

Espero que esto ayude a alguien, ya que me tomó años para trabajar este uno

Usted debe revisar el uri , no es posible encontrar el archivo "-1". Tal vez si guardó el archivo antes de llamar al Intent , podría funcionar.

  • Desafortunadamente MyApp se ha detenido. ¿Como puedo resolver esto?
  • Cómo utilizar FirebaseInstanceId.getInstance (). DeleteInstanceId ()?
  • Iniciar la aplicación de Android en la pantalla desbloquear
  • LibGDX ScrollPane que muestra la pantalla negra
  • Java.util.zip.ZipException: entrada duplicada: cómo superar
  • View.OnClickListener () una función o interfaz
  • XPathExpression no evaluatng en el contexto adecuado?
  • Utilizar Parcelable con un objeto con Hashmap
  • Android: Importación DrawerLayout no se puede resolver
  • Problemas al cambiar la posición de un ImageView en Android
  • ¿Cómo cargar la actividad del fragmento el método de creacion () de la barra seleccionada de la barra de acciones solo si la pestaña está seleccionada?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.