I'm working on an Android app in which I need to detect when user locked and unlocked, not the screen on/off. So, that I can perform certain action according locked and unlocked. But I'm unable to achieve my goal.
I declare a broadcast inside a service, register the service and receiver inside the manifest and also actions.
It's working fine, when app is open. As the app goes in background it's stop working.
public class UseService extends Service {
@Nullable
Vibrator vibr;
MediaPlayer audi;
//This is Service Class
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
super.onCreate();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction("android.intent.action.SCREEN_ON");
registerReceiver(receiver, filter);
}
//Broadcast Receiver
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
KeyguardManager myKM = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
if (action.equals(Intent.ACTION_SCREEN_OFF) && myKM.inKeyguardRestrictedInputMode())
{
vibr.vibrate(500);
if( action.equals(Intent.ACTION_SCREEN_ON) && !myKM.inKeyguardRestrictedInputMode() )
{
vibr.vibrate(5000);
}
}
}
};
//************************Started*************
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
audi=MediaPlayer.create(UseService.this, R.raw.start);
Toast.makeText(UseService.this, "The Service Has Been Started",Toast.LENGTH_SHORT).show();
return START_STICKY;
}
//*******************OnDestroy****************
@Override
public void onDestroy() {
Toast.makeText(UseService.this, "The Service is Destroyed",Toast.LENGTH_SHORT).show();
unregisterReceiver(receiver);
}
}
Main Activity
public class MainActivity extends AppCompatActivity {
Vibrator vibr;
Button btns;
//this is MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btns=(Button)findViewById(R.id.btn);
vibr=(Vibrator) getSystemService(VIBRATOR_SERVICE);
btns.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(), UseService.class);
startService(intent);
}
});
}
@Override
protected void onPause() {
super.onPause();
}
}