FireMonkey018 Ответов: 1

Как разбудить устройство с помощью клавиши регулировки громкости с помощью фонового сервиса?


This is the code of the background service that checks wether we press the volume key or not

package com.example.wakemeup;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.widget.Toast;

public class BGService extends Service{

	
	@Override
	public void onCreate() 
	{
		// TODO Auto-generated method stub
		super.onCreate();
				final BroadcastReceiver vReceiver = new BroadcastReceiver() {
		        
					
				@Override
		        public void onReceive(Context context, Intent intent) {
		        	
		        	 PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
		        	 boolean isScreenOn = powerManager.isScreenOn();
		        	 if (!isScreenOn) 
		        	 {
		        		
		        		 PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
		        		    WakeLock mWakeLock = pm.newWakeLock((PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "YourServie");
		        	        mWakeLock.acquire();
		     	        // The screen has been locked 
		     	        // do stuff...
		     	    }
		        	 else
		        	 {
		        		 Toast.makeText(BGService.this, "Screen Is On", Toast.LENGTH_LONG).show();
		        	 }
		        	
		        }
				
		    };
		    registerReceiver(vReceiver, new IntentFilter("android.media.VOLUME_CHANGED_ACTION"));
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub
		 			
		Toast.makeText(BGService.this, "Service is Started :)", Toast.LENGTH_LONG).show();
		return super.onStartCommand(intent, flags, startId);
		//43200000 schedules notification on every 12 hours
	}
	
	
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		Toast.makeText(BGService.this, "Service is Stopped :(", Toast.LENGTH_LONG).show();	
		super.onDestroy();
	}
	
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
}


Что я уже пробовал:

Попытка этого вышеописанного кода будет работать только тогда, когда устройство находится в разблокированном состоянии и экран находится в состоянии on.

служба не выполняется, пока устройство заблокировано и экран находится в выключенном состоянии.
я хочу разбудить свое устройство с помощью клавиши регулировки громкости, клавиша регулировки громкости должна работать так же, как и клавиша питания.


пожалуйста, помогите мне найти возможные решения. заранее спасибо.

1 Ответов

Рейтинг:
1

kunjan343

в настоящее время вы проверяете, включен ли экран или нет...вместо того, чтобы создавать функцию часов, вам нужно проверить, какая кнопка была нажата.

public void onClick(View v) {
switch(v.getId())
{
case R.id.button_a_id:
// handle button A click;
break;
case R.id.button_b_id:
// handle button B click;
break;
default:
throw new RuntimeException("Unknow button ID");
}

это произойдет, когда вы нажмете определенную кнопку...каждая кнопка имеет свой собственный идентификатор, так что вы можете специально проверить, нажата ли кнопка питания или нет.