2011-03-30 32 views
5

Ses tahtası uygulaması yapıyorum ve hangi menü öğesine tıklandığınıza bağlı olarak bir zil sesi veya bildirim olarak bir ses çaldırmaya çalışıyorum. Zil sesi şu anda zil sesi menüsünde varsayılan zil sesi olarak görünüyor, ancak bir telefon geldiğinde çalmıyor. Neyi yanlış yapıyorum? Kodum aşağıda listelenmiştir.Android'de oynamak için zil sesimi nasıl alabilirim?

public boolean saveas(int ressound,String file,String typesound){ 
    byte[] buffer=null; 
    InputStream fIn = getBaseContext().getResources().openRawResource(ressound); 
    int size=0; 

    try { 
     size = fIn.available(); 
     buffer = new byte[size]; 
     fIn.read(buffer); 
     fIn.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } 

    String path="/sdcard/media/audio/ringtones/"; 
    String filename=file+".ogg"; 

    boolean exists = (new File(path)).exists(); 
    if (!exists){new File(path).mkdirs();} 

    FileOutputStream save; 
    try { 
     save = new FileOutputStream(path+filename); 
     save.write(buffer); 
     save.flush(); 
     save.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     return false; 
    }  

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename))); 

    File k = new File(path, filename); 

    ContentValues values = new ContentValues(); 
    values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
    values.put(MediaStore.MediaColumns.TITLE, file); 
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); 
    values.put(MediaStore.Audio.Media.ARTIST, "douchebag"); 
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
    values.put(MediaStore.Audio.Media.IS_ALARM, true); 
    values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

    //Insert it into the database 
    this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); 

    //set ringtone 
    Uri ringtoneUri = Uri.parse(path+filename); 
    if(typesound=="ringtone") 
     RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, ringtoneUri); 

    return true; 
} 
+0

Hata mı alıyorsunuz? Gördüğünüz davranış nedir? Ayrıca, uygulamanızın beklendiği gibi çalışmayacaksa bir istisna yakaladığınızda giriş yapmayı deneyin. – CrackerJack9

cevap

1

bu soruya here göre, "dış" URI ile zil sesi ayarlamak gerekir. Anlayabildiğim kadarıyla, temel olarak tüm parçalara sahipsiniz ve sadece küçük bir ayarlama yapmalısınız.

//Insert it into the database 
Uri ringtoneUri = this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); 
//set ringtone  
if(typesound=="ringtone") 
    RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, ringtoneUri); 
0
FullBatteryAlarm.prefs = PreferenceManager 
      .getDefaultSharedPreferences(this); 
    String strRingtonePrefs = FullBatteryAlarm.prefs.getString(
      FullBatteryAlarm.res.getString(R.string.ringtone), "content://settings/system/alarm_alert"); 
    //Log.i("strringtone", strRingtonePrefs); 
    Uri notification = Uri.parse(strRingtonePrefs); 

    AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    //mgr.getStreamMaxVolume(AudioManager.STREAM_ALARM); 
    mgr.setStreamVolume(
      AudioManager.STREAM_RING, 
      mgr.getStreamMaxVolume(AudioManager.STREAM_RING), 
      AudioManager.FLAG_PLAY_SOUND); 
    //Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show(); 

VEYA varsayılan bildirim sesini alabilirsiniz: Bu pasajı sizin için çalışırsa

deneyin.

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
    r.play(); 
0

Hey, android manifest izni ayarlamak gerek. Aşağıda kullandığım izin var.

<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission> 

Ayrıca ben ogg dosyaları hakkında emin değilim. Mp3 dosyaları kullandım ve benim için çalıştı.