如何在Android中获知屏幕打开或者关闭

在有些Android 应用中需要在屏幕打开或者关闭的时候进行一些处理,下面介绍一个在android应用程序中捕获屏幕打开或者关闭动作的方法:

首先创建ScreenReceiver 类,该类继承自BroadcastReceiver ,并实现其 onReceive 方法,在该类当中可判断屏幕事件的类型,并添加相关的代码。

public class ScreenReceiver extends BroadcastReceiver {     
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // do whatever you need to do here 
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // and do whatever you need to do here
        }
    } 
}

然后在Activity中注册 BroadcastReceiver 并设置其IntenFilter 


public class ExampleActivity extends Activity {
    @Override
    protected void onCreate() {
        // initialize receiver
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        BroadcastReceiver mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);
        // your code
    }        

    // your code
}

如果需要在service当中捕获屏幕打开或者关闭事件,可参照以下方法:

public class ScreenReceiver extends BroadcastReceiver { 
    private boolean screenOff; 
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            screenOff = true;
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            screenOff = false;
        }
        Intent i = new Intent(context, UpdateService.class);
        i.putExtra("screen_state", screenOff);
        context.startService(i);
    } 
}

对应的 service样例代码如下:

public static class UpdateService extends Service { 
        @Override
        public void onCreate() {
            super.onCreate();
            // register receiver that handles screen on and screen off logic
            IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_OFF);
            BroadcastReceiver mReceiver = new ScreenReceiver();
            registerReceiver(mReceiver, filter);
        }
         @Override
        public void onStart(Intent intent, int startId) {
            boolean screenOn = intent.getBooleanExtra("screen_state", false);
            if (!screenOn) {
                // your code
            } else {
                // your code
            }
        }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MFC 实现鼠标拖动长轴以及获知椭圆,可以在控件的消息处理函数添加相应的代码。 首先,需要在控件的 WM_LBUTTONDOWN 消息记录下鼠标点击的位置,同时将一个标志位设置为 true,表示正在拖动长轴。在 WM_MOUSEMOVE 消息,如果标志位为 true,则计算长轴的长度,并重新绘制椭圆。在 WM_LBUTTONUP 消息,将标志位设置为 false,表示停止拖动长轴。 代码如下: ```c++ void CMyWnd::OnLButtonDown(UINT nFlags, CPoint point) { // 记录鼠标点击的位置 m_startPoint = point; // 设置标志位,表示正在拖动长轴 m_isDragging = true; CWnd::OnLButtonDown(nFlags, point); } void CMyWnd::OnMouseMove(UINT nFlags, CPoint point) { if (m_isDragging) { // 计算长轴的长度 int dx = point.x - m_startPoint.x; int dy = point.y - m_startPoint.y; int a = sqrt(dx * dx + dy * dy); // 重新绘制椭圆 m_a = a; Invalidate(); } CWnd::OnMouseMove(nFlags, point); } void CMyWnd::OnLButtonUp(UINT nFlags, CPoint point) { // 设置标志位,表示停止拖动长轴 m_isDragging = false; CWnd::OnLButtonUp(nFlags, point); } ``` 在这段代码,m_startPoint 是记录鼠标点击位置的成员变量,m_isDragging 是记录是否正在拖动长轴的标志位,m_a 是椭圆的长轴长度。在 WM_LBUTTONDOWN 消息记录鼠标点击位置,并设置标志位为 true,在 WM_MOUSEMOVE 消息计算长轴长度并重新绘制椭圆,在 WM_LBUTTONUP 消息设置标志位为 false。 需要注意的是,这段代码的计算长轴长度是简化的,实际上需要根据鼠标拖动的方向来计算长轴长度。另外,为了让控件重新绘制,需要调用 Invalidate() 函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值