2010-11-17 31 views
8

Android 2.1'deki bir URL'den bir zil sesi eklemek için bir kod parçası yazdım. Froyo'da hiç çalışmak istemiyor.Android Froyo ayar zil sesi

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) 

benim bir ** Bu hatanın bir google ama bu error.I android kaynağında baktı hakkında hiçbir şey bilgi almak için görünebilir: Ben eklemek için olsun

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); 

bu özel durum olsun ve sorun, albüm sanatına sahip olmadığınızda bir url "content: // media/external/audio/albumart/-1" üretiyor ve urlmatcher belirtilen URL'lerin hiçbiriyle eşleşmiyor ve sonra bu hatayı atar .

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

Birinin bu konuda nasıl bir fikrim olabileceğine dair bir fikri var mı?

cevap

3

Uygulamamda bir avuç kullanıcıyla bu hatayı aldım, sonunda düzeltdim.

Uygulamamda, medya tarayıcısına dizinlerimi taramamayı söyledim. Bir dosyaya .nomedia adlı dizine bir dosya koyarak, bu durum medya tarayıcısını kafa karıştırıcı olabileceğini düşündüm çünkü bir dosyayı dizinden kullanmak istedim. Bu nedenle, zil sesi/bildirim/alarm olarak ayarlandığında, gerekli sesi/sdcardpath/zil/sdcardpath/notifications/sdcardpath/alarms adlı bir dizine kopyaladım ve daha sonra dosyayı oradan ayarlamak için aynı kodu kullandım. o

bu bir işe me yaş aldı bu kimse yardımcı olur

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); 

     } 

Umut:

Bu

Bu kod ile zil sesi olarak ayarlanmış Ben Sonra
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(); 
        } 


    } 

yapılan kopya fonksiyonudur
0

uri'u gözden geçirmelisiniz, "-1" dosyasını bulmak mümkün değil. Belki dosyayı Intent'u aramadan önce kaydettiyseniz, işe yarayacaktır.