某些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. android录音音量变化
- 2. 检测音量按钮按
- 3. iPhone检测音量键按下。
- 4. 当按下音量按钮时检测
- 5. 使用android测量音量
- 6. AVAudioRecorder - 测量语音检测
- 7. 按下按钮测量音量
- 8. android - 检测流量变化
- 9. Android的音量键问题
- 10. 如何仅在我的Android应用中将按音量键的声音静音?
- 11. 音量变化不会改变应用程序音量
- 12. 音量变化监听器?
- 13. 音量首选项 - 阻止音量键
- 14. Android Studio - 声音与变量的路径
- 15. 如何使音量键对Audioplyer声音没有任何影响
- 16. iPhone - 音量/静音按钮
- 17. 如何检测Iphone/Ipod音量级别?
- 18. Android的录音音量
- 19. 检测uiMode或键盘变化android
- 20. Android C#:收听后台服务中的音量按钮
- 21. 控制音量键
- 22. 通过变量检测按键Visual Basic
- 23. 以编程方式使音量从静音完全变为
- 24. 如何检测当前音频设备音量
- 25. 如何检测音量是否设置为静音?
- 26. Javascript - 播放变量变化的声音
- 27. 按住android上的音量按钮?
- 28. Android。如何做大音量录音?
- 29. 挂机电源键和检测音量键在屏幕关闭时按下
- 30. Android:如何在不受任何Android系统音量(铃声,媒体等)影响的音量下播放声音?
它的工作时,手机在没有锁定,但没有当手机被锁定!! ?? – Hardik
你好,亲爱的, 有没有选择可以在电话被锁定时获得密钥检测? –