2015-01-19 3 views
1

я хочу, чтобы иметь возможность регулировать громкость с кнопки на экране (плюс и минус)регулятор громкости с помощью кнопок

Я использую следующие в методе OnClick:

 case R.id.bMinus: 
     currentRingerVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); 
     newvolume(-1); 
     audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 
       volume, 0); 
     break; 
    case R.id.bPlus: 
     currentRingerVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); 
     newvolume(1); 
     audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 
       volume, 0); 

newvolume это метод, который я хочу использовать, так что я не хожу ниже объема 0 или выше максимального объема

private void newvolume(int i) { 

    /* 

    currentRingerVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); 
    maxRingerVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING); 


    */ 
    if(volume != maxRingerVolume){ 
     volume = currentRingerVolume + i; 
     volumeInt.setText(volume.toString()); 
     Log.v("tag ", "v:" + volume + " cv:" + currentRingerVolume); 

    } 
    if (currentRingerVolume == 0 && i == -1){ 
     volume = 0; 
     volumeInt.setText(currentRingerVolume.toString()); 
     Log.v("tag ", "v:" + volume + " cv:" + currentRingerVolume); 

    } 
} 

в LogCat мое резюме (currentRingerVolume) всегда 8 и мой v (объем) изменяется только между 5-8

Я также получаю это в LogCat

12908-12914/com.asdf.wasd D/dalvikvm﹕ JIT code cache reset in 0 ms (4096 bytes 2/0) 
    01-19 13:35:11.779 12908-12914/com.asdf.wasd D/dalvikvm﹕ GC_EXPLICIT freed 1204K, 29% free 19409K/27312K, paused 7ms+14ms, total 103ms 
    01-19 13:35:12.940 12908-12914/com.asdf.wasd I/dalvikvm﹕ hprof: dumping heap strings to "[DDMS]". 
    01-19 13:35:17.224 12908-12914/com.asdf.wasd I/dalvikvm﹕ hprof: heap dump completed (20349KB) 
    01-19 13:35:17.244 12908-12908/com.adsf.wasd I/Choreographer﹕ Skipped 300 frames! The application may be doing too much work on its main thread. 

любая помощь будет принята с благодарностью

+0

Это потому, что вы получаете от AudioManager.STREAM_RING но установка в AudioManager.STREAM_MUSIC? – samgak

ответ

1

Изменить код, чтобы установить громкость от того же самого потока, который вы получите от:

case R.id.bMinus: 
    currentRingerVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); 
    newvolume(-1); 
    audioManager.setStreamVolume(AudioManager.STREAM_RING, 
      volume, 0); 
    break; 
case R.id.bPlus: 
    currentRingerVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); 
    newvolume(1); 
    audioManager.setStreamVolume(AudioManager.STREAM_RING, 
      volume, 0); 

Кроме того, этот код регулировки громкости не будет работать, если текущий том находится в макс, и вы пытаетесь его уменьшить. Изменение этого:

if((volume != maxRingerVolume) || (i == -1)){ 
    volume = currentRingerVolume + i; 
    volumeInt.setText(volume.toString()); 
    Log.v("tag ", "v:" + volume + " cv:" + currentRingerVolume); 

} 

Более легко читаемый способ изменить код может быть что-то вроде этого:

volume = currentRingerVolume + i; // apply change 
if(volume > maxRingerVolume) 
    volume = maxRingerVolume; // clamp to max 
if(volume < 0) 
    volume = 0; // clamp to min 

// output debug information: 
volumeInt.setText(volume.toString()); 
Log.v("tag ", "v:" + volume + " cv:" + currentRingerVolume); 
+0

Спасибо за помощь, сработали. – Seabass77

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