我正在开发一个应用程序,当按下音量键并保持一段时间后,该应用程序将触发警报。我有研究,似乎有些人声称不可能从服务获得输入反馈,而其他人声称可以使用扩展的ContentObserver类或使用音乐媒体api,但是我仍然无法获得它起作用。
以下应用程序完全符合我的需要,当您激活它时,无论是否关闭,锁定等,您在一段时间后按住音量和电源按钮时都会拍摄一个屏幕截图。
https://play.google.com/store/apps/details?id=com.enlightment.screenshot&hl=en
我的问题是如何使用服务类完成上述操作。
代码:
这是我的ContentObserver类:
int previousVolume;
Context context;
public ContentListener(Context c, Handler handler) {
super(handler);
context=c;
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
previousVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
}
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
int delta=previousVolume-currentVolume;
if(delta>0)
{
Logger.log(Logger.LOG, "Volume Down");
previousVolume=currentVolume;
}
else if(delta<0)
{
Logger.log(Logger.LOG, "Volume Up");
previousVolume=currentVolume;
}
}
这是我的服务类:
private ContentListener listener;
@Override
public void onCreate() {
Logger.log(Logger.LOG, "OnCreate");
listener = new ContentListener(this, new Handler());
getApplicationContext().getContentResolver().registerContentObserver(
android.provider.Settings.System.CONTENT_URI, true, listener);
}
@Override
public void onDestroy() {
Logger.log(Logger.LOG, "OnDestroy");
getApplicationContext().getContentResolver().unregisterContentObserver(listener);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) { return Service.START_STICKY; }
@Override
public IBinder onBind(Intent intent) { return null; }