某些Android應用程序在設備的音量發生變化並且某些設備鎖定音量時會生成通知。對於我的生活,我無法找到如何做到這一點。請有人幫我提供一個例子嗎?任何方式來檢測音量按鍵或音量變化與android服務?
4
A
回答
5
沒有廣播事件檢測量的變化,但也許你可以每隔一兩個秒鐘檢查體積就是用getStreamVolume
,如果你需要在一個特定的音量鎖定,每隔一兩秒鐘用途:setStreamVolume
有關更多信息,請檢查http://developer.android.com/reference/android/media/AudioManager.htm。
您可以使用AlarmManager類或處理程序每隔一秒左右檢查一次音量。
如果這是一項活動,您可以覆蓋onKeyDown
以檢測按鍵。請參閱http://developer.android.com/reference/android/view/View.html
5
實際上,您可以使用Content Observer在服務中執行某種操作。它像一個廣播接收器,聽變化的內容,如音量,接觸的情況下,通話記錄......
使用下面的代碼在服務
public class VolumeService extends Service{
AudioManager mAudioManager;
Handler mHandler;
private ContentObserver mVolumeObserver = new ContentObserver(mHandler) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
if (mAudioManager != null) {
final int volume = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
System.out.println("Volume thay đổi: " +volume);
Intent photoIntent = new Intent(VolumeService.this,TakePhotoActivity.class);
photoIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(photoIntent);
}
}
};
@Override
public void onCreate() {
super.onCreate();
System.out.println("Volume Service started");
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
Uri uri = Settings.System.getUriFor(Settings.System.VOLUME_SETTINGS[AudioManager.STREAM_RING]);
getContentResolver().registerContentObserver(uri, true, mVolumeObserver);
System.out.println("Đã đăng ký Volume listener");
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("Volume service destroied");
getContentResolver().unregisterContentObserver(mVolumeObserver);
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
不要忘了將它聲明在Android Manifest.xml中
<service android:name=".service.VolumeService" >
0
這是一種方法,您可以只修改設置的音量而不是更改。我的目標是調整系統容量服務。
此外,請避免僅在需要時進行此操作。
public class VolumeKeyController {
private MediaSessionCompat mMediaSession;
private final Context mContext;
public VolumeKeyController(Context context) {
mContext = context;
}
private void createMediaSession() {
mMediaSession = new MediaSessionCompat(mContext, KeyUtil.log);
mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
mMediaSession.setPlaybackState(new Builder()
.setState(PlaybackStateCompat.STATE_PLAYING, 0, 0)
.build());
mMediaSession.setPlaybackToRemote(getVolumeProvider());
mMediaSession.setActive(true);
}
private VolumeProviderCompat getVolumeProvider() {
final AudioManager audio = mContext.getSystemService(Context.AUDIO_SERVICE);
int STREAM_TYPE = AudioManager.STREAM_MUSIC;
int currentVolume = audio.getStreamVolume(STREAM_TYPE);
int maxVolume = audio.getStreamMaxVolume(STREAM_TYPE);
final int VOLUME_UP = 1;
final int VOLUME_DOWN = -1;
return new VolumeProviderCompat(VolumeProviderCompat.VOLUME_CONTROL_RELATIVE, maxVolume, currentVolume) {
@Override
public void onAdjustVolume(int direction) {
// Up = 1, Down = -1, Release = 0
// Replace with your action, if you don't want to adjust system volume
if (direction == VOLUME_UP) {
audio.adjustStreamVolume(STREAM_TYPE,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
else if (direction == VOLUME_DOWN) {
audio.adjustStreamVolume(STREAM_TYPE,
AudioManager.ADJUST_LOWER, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
setCurrentVolume(audio.getStreamVolume(STREAM_TYPE));
}
};
}
// Call when control needed, add a call to constructor if needed immediately
public void setActive(boolean active) {
if (mMediaSession != null) {
mMediaSession.setActive(active);
return;
}
createMediaSession();
}
// Call from Service's onDestroy method
public void destroy() {
if (mMediaSession != null) {
mMediaSession.release();
}
}
}
相關問題
- 1. phonegap:檢測音量變化
- 2. android錄音音量變化
- 3. 如何檢測Sonos音量變化
- 4. 檢測音量按鈕按
- 5. iPhone檢測音量鍵按下。
- 6. iOS音量與Android音量
- 7. 按鈕音量變化?
- 8. 檢測音量鍵按下BlackBerry 10 Java Android運行時
- 9. 當按下音量按鈕時檢測
- 10. NAudio音量變化
- 11. 使用android測量音量
- 12. AVAudioRecorder - 測量語音檢測
- 13. 音樂應用程序如何在Android屏幕中檢測音量鍵?
- 14. 按下按鈕測量音量
- 15. android - 檢測流量變化
- 16. Android錄音音量
- 17. Android的音量鍵問題
- 18. Android BroadCastReceiver音量鍵上下
- 19. 如何僅在我的Android應用中將按音量鍵的聲音靜音?
- 20. 音量變化不會改變應用程序音量
- 21. Android:防止音樂音量被改變
- 22. 音量變化監聽器?
- 23. 音量首選項 - 阻止音量鍵
- 24. Android Studio - 聲音與變量的路徑
- 25. 選擇音量通道更改音量按鍵
- 26. 如何使音量鍵對Audioplyer聲音沒有任何影響
- 27. Android音頻:變化音高
- 28. android音頻音高變化
- 29. iPhone - 音量/靜音按鈕
- 30. android AudioTrack測量音量水平
它的工作時,手機在沒有鎖定,但沒有當手機被鎖定!! ?? – Hardik
你好,親愛的, 有沒有選擇可以在電話被鎖定時獲得密鑰檢測? –