android - 有什么方法可以通过 android 服务检测音量键按下或音量变化吗?

标签 android service volume detect

某些 Android 应用程序会在设备的音量发生变化时生成通知,而某些应用程序会锁定音量。对于我的生活,我不知道这是怎么做到的。拜托,有人可以通过提供示例来帮助我吗?

最佳答案

实际上,您可以通过使用 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" >

关于android - 有什么方法可以通过 android 服务检测音量键按下或音量变化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7297242/

相关文章:

java - 关于从内部类访问和修改属性的理论

azure - 存储文件以从 Service Fabric 应用程序流式传输的最快方法是什么?

mysql - 使用 EBS 在 Amazon EC2 上运行 MySQL

FFMPEG 音量命令参数限制

ios - 如何在 iOS 上获取音量级别和音量更改通知?

PHP-MySQL | PHP-MySQL那么更好/更干净的方式吗?

java - Android SearchView 和 NavigationDrawer

android - 默认的 EditText 图像位于何处?

javascript - 修改页面 DOM 的 Firefox 插件

Python 服务文件缓存 Apache 竞态条件