简体   繁体   中英

how to make android background service start only when screen is on/wakeup

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

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;
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM