`
yhz61010
  • 浏览: 558029 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:12175
社区版块
存档分类
最新评论

[转] Android 检测电源按钮是否被按下

阅读更多
原文地址:https://stackoverflow.com/a/30030372

在 AndroidManifest.xml 文件中追加如下代码:
<service android:name="com.example.userpresent.LockService">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</service>

在 MainActivity.java 中追加如下代码,启动 Service:
startService(new Intent(this, LockService.class));

LockService.java
package com.example.userpresent;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;

// https://stackoverflow.com/a/30030372
public class LockService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_USER_PRESENT);
        final BroadcastReceiver mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);
        return super.onStartCommand(intent, flags, startId);
    }

    public class LocalBinder extends Binder {
        LockService getService() {
            return LockService.this;
        }
    }
}

ScreenReceiver.java
package com.example.userpresent;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;

public class ScreenReceiver extends BroadcastReceiver {

    public static boolean wasScreenOn = true;

    @Override
    public void onReceive(final Context context, final Intent intent) {
    Log.e("LOB","onReceive");
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // do whatever you need to do here
            wasScreenOn = false;
            Log.e("LOB","wasScreenOn"+wasScreenOn);
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // and do whatever you need to do here
            wasScreenOn = true;

        }else if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)){
            Log.e("LOB","userpresent");
            Log.e("LOB","wasScreenOn"+wasScreenOn);
            String url = "http://www.stackoverflow.com";
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.setData(Uri.parse(url)); 
            context.startActivity(i); 
        }
    }
}
分享到:
评论

相关推荐

    Android自定义按钮实现长按功能

    Toast.makeText(MainActivity.this, "按钮被长按了", Toast.LENGTH_SHORT).show(); return true; } }); ``` 通过这种方式,我们就成功地实现了Android自定义按钮的长按功能。这种方法允许我们在不改变原有按钮...

    AutoScreenOnOff:一个Android实用程序应用程序,可通过sw(而不是硬件电源按钮)自动打开屏幕

    通过检测接近传感器的值来自动打开/关闭屏幕的android应用。 特征 通过检测p传感器,自动为您打开/关闭屏幕。 仅允许您在充电过程中启用该功能。 旋转屏幕时,可以禁用该功能。 屏幕开/关延迟的单独超时值,以...

    平板电脑检测报告.pdf

    * 标准:检测平板电脑的连接器/插头/插空是否容易插拔,Palm rest温度是否合适,电源开关按钮是否容易误操作。 二、功能测试 1. 开机速度检测:测试平板电脑的开机速度,检测Android系统的启动速度是否快于WINDOWS...

    android 通过AccessibilityService实现系统按键监听

    系统按键事件通常包括 TYPE_KEY_EVENT,当检测到这类事件时,可以进一步通过 AccessibilityEvent 的 getEventType() 和 getKeyCode() 方法来判断具体是哪个按键被按下。 5. **响应事件**:根据监听到的按键事件,...

    flutter_hardware_buttons:Flutter插件,用于检测所有硬件按钮

    屏幕截图特征检测音量按钮检测主页按钮检测锁定(电源)按钮要添加...Android规格如果您订阅音量按钮事件,此插件将不可避免地要求 ,因为我们发现这是在Flutter插件环境中做到这一点的唯一方法。 我们确实为您显示...

    Android应用源码基于android2

    考虑到不同设备间的差异,应用需要包含适当的异常处理代码,比如检测设备是否支持闪光灯功能。同时,由于Android 2.x系统版本较旧,要处理API级别的不一致问题,确保应用能在多个设备上正常运行。 7. 性能优化: ...

    Android中文翻译组_Android中文API合集(4).zip_android_android 翻译_android开发

    1. **系统服务**: Android系统服务如电源管理、闹钟服务、位置服务、蓝牙管理等,这些服务允许开发者实现各种高级功能,比如控制设备的电源状态、设置提醒、获取用户的位置信息以及与其他设备进行蓝牙通信。...

    安卓(Android) 监听按键长按事件

    在上述代码中,onKeyDown用于检测是否是按键的首次按下,并启动按键跟踪;onKeyLongPress用于处理按键长按事件;onKeyUp用于处理按键释放事件。通过合理的事件处理,可以实现复杂的功能,如相机应用中的长按拍照功能...

    Android代码-android一键锁屏源代码android4.2工作正常.zip

    在这个一键锁屏应用中,BroadcastReceiver可能会监听电源键的按下事件,当检测到该事件时触发锁屏操作。 2. **System Permissions**:由于涉及到对设备状态的改变,应用需要请求相应的权限。例如,`...

    android初学者小项目

    6. **BroadcastReceiver**:在某些情况下,应用可能会注册一个广播接收器,监听设备电源状态的变化,比如开机或解锁时自动启动电筒。 7. **Service**:如果电筒需要在后台持续运行,可能需要创建一个服务(Service)...

    Android屏幕锁屏

    为了使锁屏应用能在用户按下电源键后自动启动,我们需要监听系统广播,当接收到`ACTION_SCREEN_OFF`广播时启动LockScreenActivity。首先创建一个BroadcastReceiver: ```java public class ScreenOffReceiver ...

    android屏幕密码锁源码

    8. **BroadcastReceiver**:可以注册一个BroadcastReceiver监听系统的电源键事件,当设备屏幕关闭时自动激活锁屏。 9. **生命周期管理**:在Activity或Fragment的生命周期方法中,需要正确处理用户离开和返回的情况...

    Android应用源码之LockScreen_应用.zip

    Android系统有许多版本和设备,源码中可能包含针对不同API级别和设备的适配代码,以确保应用在各种环境下都能正常工作。 10. **安全性考虑**: 作为安全的关键部分,锁屏应用必须保证用户数据的安全。源码分析可...

    API-Android+docs_all.rar

    API-Android+docs_all.rar 是一个包含Android API文档的压缩包,主要针对的是Android开发者,提供了全面的Android API参考信息。这个压缩包中的核心文件是API-Android+docs_all.chm,这通常是一个CHM(Compiled Help...

    安卓Android源码——一键锁屏功能源码.zip

    可以通过BroadcastReceiver监听系统的电源按钮事件,当检测到电源按钮被按下时,自动执行锁屏操作。但这需要较高的系统权限,一般在系统应用中实现。 7. **UI设计**: 设计简洁直观的用户界面,让用户知道何时...

    基于android的移动应用手电筒源码.zip

    在Android平台上,开发一款移动应用手电筒是一个常见的实践,它可以帮助用户在光线不足的情况下提供照明。本项目是一个基于Android的移动应用手电筒的源码,提供了完整的代码实现,对于学习Android应用开发或者想要...

    Android 系统常用广播

    当屏幕超时锁屏时,或者用户按下电源按钮时,系统会发送此广播。开发者可以通过监听这一广播来实现特定的功能,如保存数据或暂停长时间运行的任务。 #### 九、`Intent.ACTION_CONFIGURATION_CHANGED` - 设备设置...

    Android一键锁屏

    在一键锁屏应用中,Activity会监听特定的事件,例如电源键的按下,然后触发屏幕锁定操作。开发者需要掌握如何在不同的生命周期方法中插入适当的代码,如onCreate(), onStart(), onResume(), onPause(), onStop()和...

    智能小车蓝牙控制android

    此外,硬件部分还需要包括电源、电机驱动电路以及蓝牙模块,确保设备能够稳定工作并接收来自Android设备的无线信号。 为了使初学者更容易上手,项目可能包含了一些基础的教程或示例代码,例如“TRI DAGGER X”可能...

    虚拟来电源代码

    总的来说,"虚拟来电源代码"项目涵盖了Android应用开发中的多个核心技术和最佳实践,对于学习和理解Android UI设计、事件处理、数据绑定等方面都有很高的参考价值。通过深入研究和实践这些技术,开发者可以提升自己...

Global site tag (gtag.js) - Google Analytics