如何让广播在Android的锁屏 [英] how to get broadcast for screen lock in android

查看:179
本文介绍了如何让广播在Android的锁屏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何获得触发屏幕在Android是锁定或在?
我试着用SCREEN_OFF&安培; SCREEN_ON行动广播接收器,但它不工作。

 公共无效的onReceive(上下文的背景下,意图意图){
        Log.d(XYZ,画面ON / OFF);        Toast.makeText(背景下,银幕,10000).show();
        如果(intent.getAction()。等于(Intent.ACTION_SCREEN_ON))
        {
.......
}
}

在活动我已经注册像广播 -

屏幕是我的广播接收机的对象

  IntentFilter的过滤器=新的IntentFilter(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_OFF);
            mContext.registerReceiver(屏幕,过滤器);


解决方案

调用 UpdateService.class 中的 MainActivity.class

startService(新意图(MainActivity.this,UpdateService.class));

UpdateService.class

 公共类UpdateService延伸服务{    广播接收器mReceiver;
    公共静态INT countOn = 0;
    公共静态INT countOff = 0;    @覆盖
    公共无效的onCreate(){
        super.onCreate();
        //注册接收处理屏幕上,屏幕关闭逻辑
        Log.i(UpdateService,开始);
        IntentFilter的过滤器=新的IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_ANSWER);
        mReceiver =新MyReceiver();
        registerReceiver(mReceiver,过滤器);
    }    @覆盖
    公共无效的onDestroy(){        unregisterReceiver(mReceiver);
        Log.i(的onDestroy Reciever,被称为);        super.onDestroy();
    }    @覆盖
    公众诠释onStartCommand(意向意图,诠释标志诠释startId){
        // TODO自动生成方法存根
        布尔screenOn = intent.getBooleanExtra(screen_state,FALSE);
        如果(!screenOn){
            Log.i(screenON,被称为);
            Log.i(viaService,CountOn =+ countOn);            Toast.makeText(getApplicationContext(),醒,Toast.LENGTH_LONG)
                    。显示();
        }其他{
            Log.i(SCREENOFF,被称为);
            Log.i(viaService,CountOff =+ countOff);
        }
        返回START_STICKY;
    }
    @覆盖
    公众的IBinder onBind(意向意图){
        // TODO自动生成方法存根
        返回null;
    }
}

Receiver类

 公共类MyReceiver扩展广播接收器{
    私人布尔SCREENOFF;    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){
        如果(intent.getAction()。等于(Intent.ACTION_SCREEN_OFF)){
            SCREENOFF = TRUE;
            // Log.i(通过接收器,正常SCREENOFF);
        }否则如果(intent.getAction()。等于(Intent.ACTION_SCREEN_ON)){
            SCREENOFF = FALSE;
        }否则如果(intent.getAction()。等于(Intent.ACTION_ANSWER)){        }        意图I =新意图(背景下,UpdateService.class);
        i.putExtra(screen_state,SCREENOFF);
        context.startService(ⅰ);
    }}

How to get trigger that screen is locked or on in android?? i tried using SCREEN_OFF & SCREEN_ON action in broadcast receiver but it's not working.

public void onReceive(Context context, Intent intent) {
        Log.d("XYZ", "Screen ON/OFF");

        Toast.makeText(context, "screen",10000).show();
        if(intent.getAction().equals(Intent.ACTION_SCREEN_ON))
        {
.......
}
}

in activity i have registered broadcast like-

screen is object of my broadcast receiver

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_OFF);
            mContext.registerReceiver(screen, filter);

解决方案

Call the UpdateService.class within your MainActivity.class .

startService(new Intent(MainActivity.this, UpdateService.class));

UpdateService.class

public class UpdateService extends Service {

    BroadcastReceiver mReceiver;
    public static int countOn = 0;
    public static int countOff = 0;

    @Override
    public void onCreate() {
        super.onCreate();
        // register receiver that handles screen on and screen off logic
        Log.i("UpdateService", "Started");
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_ANSWER);
        mReceiver = new MyReceiver();
        registerReceiver(mReceiver, filter);
    }

    @Override
    public void onDestroy() {

        unregisterReceiver(mReceiver);
        Log.i("onDestroy Reciever", "Called");

        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        boolean screenOn = intent.getBooleanExtra("screen_state", false);
        if (!screenOn) {
            Log.i("screenON", "Called");
            Log.i("viaService", "CountOn =" + countOn);

            Toast.makeText(getApplicationContext(), "Awake", Toast.LENGTH_LONG)
                    .show();
        } else {
            Log.i("screenOFF", "Called");
            Log.i("viaService", "CountOff =" + countOff);
        }


        return START_STICKY;
    }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
}

Receiver class

public class MyReceiver extends BroadcastReceiver {
    private boolean screenOff;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            screenOff = true;
            // Log.i("via Receiver","Normal ScreenOFF" );
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            screenOff = false;
        } else if(intent.getAction().equals(Intent.ACTION_ANSWER)) {

        }

        Intent i = new Intent(context, UpdateService.class);
        i.putExtra("screen_state", screenOff);
        context.startService(i);
    }

}

这篇关于如何让广播在Android的锁屏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆