android powerkey触发小应用总结

近日,做了一个长按powerkey触发dialog然后包含“关机”,"重启",“飞行模式”三个button功能的应用。现将该应用的主文件做一下记录,方便日后查阅:

软件版本:android4.4

//源码如下:

package com.heimi.power;

import com.heimi.power.R;

import android.app.Activity;

import android.app.Service;

import android.content.pm.ActivityInfo;

import android.os.Bundle;

import android.os.Vibrator;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.Window;

import android.view.WindowManager;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

import android.util.Log;

import android.content.Intent;

import android.content.IntentFilter;

import android.content.Context;

import android.content.ComponentName;

import android.app.ActivityManager;

import android.content.BroadcastReceiver;

import android.provider.Settings;

public class PowerKey extends Activity implements OnClickListener{

private ImageView restartView, poweroffView, airView;

private TextView cancelView;

private final int CLICK_CANCEL = 1;

private final int CLICK_RESET = 2;

private final int CLICK_POWER = 3;

private final int CLICK_AIR = 4;

static final String ACTION = "android.intent.action.SCREEN_OFF";

static final String ANAME = "PowerKey";

protected BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(ACTION)){

ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);

ComponentName cn = am.getRunningTasks(1).get(0).topActivity;

if (cn.getClassName().contains(ANAME)) {

context.unregisterReceiver(broadcastReceiver);

finish();

}

}

}

};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_SCREEN_OFF);

registerReceiver(broadcastReceiver, filter, null, null);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

setContentView(R.layout.main);

airView = (ImageView) findViewById(R.id.iv_dormancy_pattern);

airView.setOnClickListener(this);

airView.setTag(CLICK_AIR);

if (getAirplaneModeStatus()) {

airView.setImageDrawable(getResources().getDrawable(R.drawable.dormancy_pattern_normal));

} else {

airView.setImageDrawable(getResources().getDrawable(R.drawable.dormancy_pattern_pressed));

}

cancelView = (TextView) findViewById(R.id.iv_cancel);

cancelView.setOnClickListener(this);

cancelView.setTag(CLICK_CANCEL);

restartView = (ImageView) findViewById(R.id.iv_restart);

restartView.setOnClickListener(this);

restartView.setTag(CLICK_RESET);

poweroffView = (ImageView) findViewById(R.id.iv_shutdown);

poweroffView.setOnClickListener(this);

poweroffView.setTag(CLICK_POWER);

}

@Override

public void onStop() {

super.onStop();

}

@Override

public void onResume() {

super.onResume();

}

@Override

public void onRestart() {

super.onRestart();

}

//获取飞行模式关闭或开启状态

private boolean getAirplaneModeStatus() {

boolean status = Settings.Global.getInt(this.getContentResolver(),

Settings.Global.AIRPLANE_MODE_ON, 0) == 1 ? true : false;

return status;

}

//开启或关闭飞行模式

private void setAirplaneMode(Context context, boolean enable)

{

Settings.Global.putInt(context.getContentResolver(),

Settings.Global.AIRPLANE_MODE_ON, enable ? 1 : 0);

Intent airIntent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);

airIntent.putExtra("state", enable);

context.sendBroadcast(airIntent);

}

public void onClick(View v) {

int tag = (Integer) v.getTag();

switch (tag) {

case CLICK_CANCEL:

this.finish();

break;

case CLICK_RESET:

Intent resetIntent = new Intent(Intent.ACTION_REBOOT);

resetIntent.putExtra("nowait", 1);

resetIntent.putExtra("interval", 1);

resetIntent.putExtra("window", 0);

sendBroadcast(resetIntent);

break;

case CLICK_POWER:

Intent powerIntent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);

powerIntent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);

//其中false换成true,会弹出是否关机的确认窗口

powerIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(powerIntent);

break;

case CLICK_AIR:

if (getAirplaneModeStatus()) {

setAirplaneMode(this, false);

airView.setImageDrawable(getResources().getDrawable(R.drawable.dormancy_pattern_pressed));

} else {

setAirplaneMode(this, true);

airView.setImageDrawable(getResources().getDrawable(R.drawable.dormancy_pattern_normal));

}

break;

}

}

}

O(∩_∩)O~,。。。。先告一段落,未完待续!

时间: 2024-12-14 07:18:09

android powerkey触发小应用总结的相关文章

最强 Android Studio 使用小技巧和快捷键【非原创】

(发现本文是个很不错的文章,相当实用,特分享与大家.分享自:http://m.open-open.com/m/lib/view/1458715872710.html 特此声明,好记性不如烂笔头,market下来以备后用) 原文如下: 写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本文将这62个小技巧分为常用技巧(1 – 28).编码技巧(29 –

最强 Android Studio 使用小技巧和快捷键

写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本文将这62个小技巧分为常用技巧(1 – 28).编码技巧(29 – 49)和调试技巧(50 – 62),分成三个部分. 每个小技巧都配有 gif 动图,由于原图在 google photo 上,加载较慢,本文全部转存到七牛上了. 由于能力有限,翻译过程中难免有所疏漏,如发现错误或问题,请在评论中提出

Android 之窗口小部件高级篇--App Widget 之 RemoteViews - 跨到对岸去

在之前的一篇博文( Android 之窗口小部件详解--App Widge t)中,已经介绍了App Widget的基本用法和简单实例.这篇主要讲解 App Widget 的高级内容,即通过 RemoteViews 去管理Widget的中GridView.ListView.StackView等内容.在学习本篇之前,建议读者先掌握 App Widget 的基本知识. 1 RemoteViews等相关类的介绍 下面先简单介绍RemoteViews.RemoteViewsService.RemoteV

Android应用开发-小巫CSDN博客客户端之显示博文详细内容

Android应用开发-小巫CSDN博客客户端之显示博文详细内容 上篇博文给大家介绍的是如何嵌入有米广告并且获取收益,本篇博客打算讲讲关于如何在一个ListView里显示博文的详细信息,这个可能是童鞋们比较困惑的,因为一篇博客可能有标题.摘要.图片.代码等等元素组成,我们要怎么在一个界面中显示这些内容并且按照自己的指定的方式显示呢,别急,下面会告诉大家. 重新整理一下一篇博文可能有以下元素: 标题 摘要 文本内容 图片 粗标题 代码块 在UI篇小巫已经介绍了,博文详细内容的主要控件就是一个Lis

Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件

Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件 上一篇博客给大家介绍了如何分析网页并且使用jsoup这个库对html代码进行解析,本篇博客继续给大家介绍如何集成友盟社会化组件,如何使用SDK提供的API轻松实现多平台的社会化分享,官网的文档和Demo看起来很头疼的有木有,小巫在集成这个社会化的组件也有点烦躁,所以也需要各位耐心看下面的博文把友盟社会化组件集成到你的应用中去.为什么要选择友盟呢,这里也是答应了小喵的,要帮忙集成他们的服务,所以也顺带帮他们写一篇这样的博文,千

Android应用开发-小巫CSDN博客客户端Jsoup篇

Android应用开发-小巫CSDN博客客户端Jsoup篇 距上一篇博客已经过去了两个星期,小巫也觉得非常抱歉,因为在忙着做另外一个项目,几乎抽不出空来,这不小巫会把剩下的博文全部在国庆补上.本篇博客将会给大家介绍如何使用Jsoup这个库来解析我们的网页,并且如何对我们想解析的网页进行分析. Jsoup这个库的下载地址:http://jsoup.org/download 笔者这里使用的jsoup-1.7.2 下载完之后复制到项目中的libs目录下即可: Jsoup的资料比较少,可供参考的可到其官

android FakeWindow的小应用大用途

在windowmanager里面有一个FakeWindow,细致一看也就是一个透明的应用覆盖到屏幕的最前端,这样有什么优点呢?首先我们还是从应用的需求来看这个问题.在android系统里无论是手机还是平板,状态栏一般都是在的,导航栏在有些设备里面是没有的,由于android须要的那些HOME\BACK\MENU\SERCACH可能已经做在触摸屏上,或者是其它一些低成本的触摸小按键上或者硬按键上,可是也有非常多机器是没有这些的,那么就须要一个导航栏了,这样前期背景就清楚了. 有了导航栏跟状态栏,好

Android 48个小知识

1.判断sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 2.TextView部分文字设置颜色 TextView tv = new TextView(this); //添加css样式 tv.setText(Html.fromHtml("<font color="#ff0000">红色<

Android课程---Android Studio使用小技巧:提取方法代码片段

这篇文章主要介绍了Android Studio使用小技巧:提取方法代码片段,本文分享了一个快速复制粘贴方法代码片段的小技巧,并用GIF图演示,需要的朋友可以参考下 今天来给大家介绍一个非常有用的Studio Tips,有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再放在一个单独的方法里,通常我们的做法是复制粘贴,现在我来教给大家一个非常简洁的方法,先看下gif演示吧: