用android服务检测音量键按下或音量变化的任何方法?

kev*_*liu 4 service android volume detect

某些Android应用会在设备的音量发生变化时生成通知,有些会锁定音量.对于我的生活,我不知道如何做到这一点.请有人帮我提供一个例子吗?

Ree*_*eed 5

没有广播操作可以检测音量变化,但您可能每两秒或两次检查音量是多少getStreamVolume,如果您需要将其锁定在特定音量,每隔一两秒使用:setStreamVolume

有关详细信息,请查看http://developer.android.com/reference/android/media/AudioManager.htm.

您可以使用AlarmManager类或处理程序每​​秒检查一次音量.

如果它是一个活动,您可以覆盖onKeyDown以检测按键.请参阅http://developer.android.com/reference/android/view/View.html


mvm*_*anh 5

实际上,通过使用内容观察器,您可以通过一种方式进行服务.它就像一个广播接收器,听取音量,联系人,通话记录等内容变化的事件......

在您的服务中使用以下代码

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

}
Run Code Online (Sandbox Code Playgroud)

不要忘记在Android Manifest.xml中声明它

<service android:name=".service.VolumeService" >
Run Code Online (Sandbox Code Playgroud)

  • `Settings.System.VOLUME_SETTINGS` 不再可用 (2认同)