I want to make a background service which can automatically run when android device screen is on/wake up or when there is any touch input on anything. Kindly help me out. Thanks alot
Asked
Active
Viewed 2,122 times
2
-
Follow that Question http://stackoverflow.com/questions/9477922/android-broadcast-receiver-for-screen-on-and-screen-off – Engr Waseem Arain Mar 31 '14 at 12:51
1 Answers
0
Start the service on your onCreate
method in your Activity.
startService(new Intent(this, CDTservice.class));
Don't forget to register this service in manifest file.
<service
android:enabled="true"
android:name=".CDTservice" />
Here is the Service class:
package com.example.sensorsample;
import java.util.List;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.KeyguardManager;
import android.app.Service;
import android.app.KeyguardManager.KeyguardLock;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
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.util.Log;
import android.view.WindowManager;
import android.widget.Toast;
public class CDTservice extends Service {
ScreenBroadcastReceiver m_receiver;
public String activityname;
PowerManager pm;
WakeLock wl;
@Override
public void onCreate() {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
m_receiver = new ScreenBroadcastReceiver();
registerReceiver(m_receiver, filter);
Log.d("Widgettool", "works");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
start();
Toast.makeText(getBaseContext(), "SERVICE ON", Toast.LENGTH_SHORT)
.show();
return START_STICKY;
}
@Override
public void onDestroy() {
stop();
super.onDestroy();
unregisterReceiver(m_receiver);
wl.release();
}
@SuppressWarnings("deprecation")
public void start() {
try {
pm = (PowerManager) getApplicationContext().getSystemService(
Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP, getClass().getName());
wl.acquire();
KeyguardManager mgr = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = mgr.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();
//new SensorActivity().service();
} catch (Exception e) {
}
}
public void stop() {
ActivityManager am = (ActivityManager) this
.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
Log.d("topActivity", "CURRENT Activity ::"
+ taskInfo.get(0).topActivity.getClassName());
activityname = taskInfo.get(0).topActivity.getClassName();
ComponentName componentInfo = taskInfo.get(0).topActivity;
componentInfo.getPackageName();
}
private class ScreenBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.d("ON SCREEN ON", "might hang here");
// start();
// stop();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
start();
Log.d("SCREEN OFF", "might hang here");
// stop();
}
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}

Adam Harte
- 10,369
- 7
- 52
- 85

Sethu
- 430
- 2
- 13
-
I have tried your source code but it is not working... what i want is my application opens when the screen unlocks, or awake – mighty Apr 03 '14 at 11:35