Android应用程序开发与典型案例监听系统开关机

合集下载

基于Android手机的远程视频监控系统的设计与开发

基于Android手机的远程视频监控系统的设计与开发

4、数据存储与备份
4、数据存储与备份
远程视频监控系统会产生大量的监控数据,因此需要考虑数据存储与备份方 案。在开发过程中,需要选择合适的存储设备和存储方案,确保数据的安全性和 可靠性。同时,需要考虑数据备份和恢复机制,避免数据丢失或损坏。此外,需 要考虑数据的隐私和保密问题,确保用户隐私得到保护。
7、报警模块
7、报警模块
报警模块负责检测监控区域内的异常情况,如移动物体、人脸识别等。一旦 检测到异常,系统将立即发出警报信息给用户,同时将报警信息存储到本地和云 端。
7、报警模块
系统实现 1、摄像头模块实现过程与技术:使用Android摄像头API进行视频采集,采 用H.264标准对视频进行压缩编码。
1、总体架构
1、总体架构
基于Android智能手机的远程视频监控系统主要由摄像头模块、数据处理模块、 网络传输模块、存储模块、控制模块和报警模块组成。
2、摄像头模块
2、摄像头模块
摄像头模块负责采集监控区域的视频画面。为满足实时性需求,本系统采用 H.264视频编码标准进行压缩,降低视频传输的带宽要求。
5、存储模块
5、存储模块
存储模块负责将视频数据存储在本地和云端,方便用户在需要时进行回看或 备份。本系统采用NVMe SSD硬盘进行本地存储,同时使用云存储备份数据,提高 数据安全性和可用性。
ቤተ መጻሕፍቲ ባይዱ
6、控制模块
6、控制模块
控制模块负责接收用户在远程客户端发出的指令,对监控设备进行控制,如 调整镜头角度、云台旋转等。本系统采用WebSocket协议进行指令传输,实现实 时控制。
5、系统安全与稳定性
5、系统安全与稳定性
远程视频监控系统涉及到用户的隐私和安全问题,因此需要充分考虑系统安 全与稳定性。在开发过程中,需要采用加密技术和安全措施,确保数据传输和存 储的安全性。需要考虑系统的稳定性和可靠性,避免因设备故障或网络问题导致 系统瘫痪或数据

黑马程序员安卓教程:广播接收者之开机启动的监听

黑马程序员安卓教程:广播接收者之开机启动的监听

广播接收者之开机启动的监听在Android开发中,我们常常需要监听系统的开机启动广播。

例如Android系统的桌面程序,当系统启动时,则运行桌面程序,并列举Android设备上的所有应用到桌面上。

下面我们将通过一个Demo来监听系统的启动广播事件。

设计需求:开发一个勒索应用,一旦用户开机,该勒索应用就自动运行,无论用户点击“BACK”按键还是“HOME”按键都不能退出该应用。

具体步骤如下:1.编写广播接收者新建工程“04_勒索软件”,在该工程的包下新建一个类“BootReceiver”,此时工程结构如图1-1所示:图1-1所示编写“BootReceiver”使之继承BroadcastReceiver并重写onReceive方法。

具体代码如例1-1:例1-1编写了一个广播接收者即SDStatusReceiver,一旦接收到对应的广播就执行onReceive方法。

广播接收者已经编写完成,我们还需要注册该广播接收者。

2.声明该广播接收者在项目清单文件中注册该广播接收者SDStatusReceiver,代码如下例1-2:例1-23.指定接收的意图在“04_勒索软件”应用中,我们只对开机的广播感兴趣,对于其他的系统广播并不感兴趣。

为此,我们需要指定该广播接收者所要接收的系统广播。

代码如例1-3:从例1-3可知:我们可以通过意图过滤器来指定广播接收器需要接收的系统广播,常量“android.intent.action.BOOT_COMPLETED”就表示系统开启事件。

至此,我们已经完成了广播接收器编写,接下来就是处理“04_勒索软件”的勒索界面,根据需求设计页面效果如图1-2所示:图1-2所示从图1-2可知:当系统开启之后,“04_勒索软件”就会自动运行并一直显示图1-2所示页面。

此时,“BACK”按键和“HOME“按键都会陪屏蔽掉,从而到达勒索的目的。

在例1-1中我们虽然重写了onReceive方法,但没有编写该方面的业务逻辑,调整例1-1代码如例1-4所示:从例1-4可知:一旦该广播接收器调用了onReceive方法,系统就会跳转到MainActivity页面中也就是勒索页面。

androidstudio按钮监听的5种方法实例详解

androidstudio按钮监听的5种方法实例详解

androidstudio按钮监听的5种⽅法实例详解1.匿名内部类public class MainActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Button btn1 = findViewById(R.id.btn1);//匿名内部类btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(getApplicationContext(), “你点击了按钮1”, Toast.LENGTH_LONG).show();}});}2.内部类public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Button btn2 = findViewById(R.id.btn2);Btn2CLickListener btn2CLickListener = new Btn2CLickListener();btn2.setOnClickListener(btn2CLickListener);}class Btn2CLickListener implements View.OnClickListener{@Overridepublic void onClick(View v){Toast.makeText(getApplicationContext(),“你点击了按钮2”,Toast.LENGTH_LONG).show();}}3外部类**MainActivity.java:public class MainActivity extends AppCompatActivity{protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);}Button btn3 = findViewById(R.id.btn3);Btn3ClickListener btn3CLickListener = new Btn3ClickListener(getApplicationContext());btn3.setOnClickListener(btn3CLickListener);}Btn3ClickListener.java:4⾃⾝activitypublic class MainActivity extends AppCompatActivity implements View.OnClickListener {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Button btn4 = findViewById(R.id.btn4);//main activitybtn4.setOnClickListener(this);}public void onClick(View v) {Toast.makeText(getApplicationContext(), “你点击了按钮4”, Toast.LENGTH_SHORT).show();}}5直接绑定到标签activity_main.xml:添加 android:onClick=“myClick”。

Android截取开机关机事件

Android截取开机关机事件

Android截取开机关机事件Android截取开机关机事件2011-06-29 10:16:04标签:Android 移动开发Boot Shutdown监听Android开机关机事件!首先创建一个Android工程,整个工程的目录结构如下:主activity代码不做更改:HelloWorldActivity.classpackage com.android.ray.activity;import android.app.Activity;import android.os.Bundle;public class HelloWorldActivity extends Activity {public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(yout.main);}}然后新建两个BroadCastReceiver代码如下:BootReceiver.classpackage com.android.ray.service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class BootReceiver extends BroadcastReceiver {private String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";public void onReceive(Context context, Intent intent) {if(intent.getAction().equals(ACTION_BOOT)){System.out.println("----------******----------");System.out.println("Boot this system!!!");Log.i("MainActivity", "Boot this system!!!");}}}ShutdownReceiver???package com.android.ray.service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class ShutdownReceiver extends BroadcastReceiver {private String ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN";public void onReceive(Context context, Intent intent) {if(intent.getAction().equals(ACTION_SHUTDOWN)){System.out.println("----------******----------");System.out.println("Shut down this system!!!");Log.i("MainActivity", "Shut down this system!!!");}}最后在Manifest.xml中申明这两个BroadCastReceiver并添上权限<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="/apk/res/android" package="com.android.ray.activity"android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="10" /><uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED" /><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".HelloWorldActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity><receiverandroid:name="com.android.ray.service.BootReceiver"><intent-filter><actionandroid:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter></receiver><receiverandroid:name="com.android.ray.service.ShutdownReceiver"> <intent-filter><actionandroid:name="android.intent.action.ACTION_SHUTDOWN"/> </intent-filter></receiver></application></manifest>注意:重启模拟器才会执行BootReceiver.class。

Android开关机动画铃声播放原理

Android开关机动画铃声播放原理

Android开关机动画/铃音是如何播放的?1. 开关机动画的启动Android系统在init.rc中定义了很多Servic,具体定义格式可以参考《Android Platform Developer’s Guide》中的“Android Init Language”。

Init.rc中定义的Service将会被Init进程创建,其中已经定义的服务就包含了开机动画.每一项服务必须在/init.rc中定义.Android系统启动时,init守护进程将解析init.rc和启动属性服务,属性“ ctl.st art ”和“ ctl.stop ”是用来启动和停止服务的。

一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。

这项服务的启动结果将会放入“ init.svc.<服务名>“属性中。

客户端应用程序可以轮询那个属性值,以确定结果。

service bootanim /system/bin/bootanimationuser graphicsgroup graphicsdisabledoneshot//定义了一个bootanim的服务,对应执行/system/bin/bootanimation//disabled 表示init进程创建只是创建它,但不立刻执行//oneshot 表示该服务只执行一次当android系统boot时,开始加载动画和开机铃声,其代码位于//源文件SurfaceFlinger.cppstatus_t SurfaceFlinger::readyT oRun(){// start boot animation serviceproperty_set("ctl.start", "bootanim");//}当Android完成boot后,关闭动画和开机铃声,代码位于//源文件SurfaceFlinger.cppvoid SurfaceFlinger::bootFinished(){//stop bootanim serviceproperty_set("ctl.stop", "bootanim");}在Android系统中,长按Power键默认会弹出对话框让你选择“飞行模式”,“静音”,“关机”等功能。

Android远程监控终端应用的研究与开发

Android远程监控终端应用的研究与开发

1 终端应 用架构及运行流程
An ri dod系统 架 构 分 为 四层 : 用 层 、 用 框 架 层 、 应 应
系统运 行库 、iu enl Ln x ra 内核 层 。本 远程 终 端应 用 是基 k
于 CS / 服务架构开发 , 主要应用于远程获取手机信息和
控 制 手机 完成 指定 工 作 , 客户 端 即为 A dod手 机 , n ri 服务
23 远 程 图像监 控 .
解析 指 令短 信 , t e为 so, 执 行拍 若 y p ht则 摄功 能 。 首先 , 用 A do 调 nri d中的 E vrn n. ni met o
gtxenltrgSae ) eE t a oae tt( 方法 检 测 环境 是 否 满 r S
足 照 相 机 开启 要 求 , 足后 , 启 照 相 机 , 满 开 设
图 2 An ri 程 监 控 终 端 功 能模 块 架构 dod远
置参数 、 格式 、 分辨率 , 然后使用 t eiue ) a pt ( k cr
方 法获 取 JE P G格 式 的照 片 , 存储 到 S cr 并 D ad 中, 然后 关 闭照相 机 。
tr n 1 s r a o t l t er p o e o c me a e mi a .U e s c n c nr h i h n s t a r o r mo ey e tl .Up o d n i g d t o t mc l a ig ma e aa t o m s r e ev r a d d s ly n n o mai n d t n w b p g a n i a i g i fr t aa i e a e c n p o i l me t te s ll mo i r g s s m.Ac o d n mp e n h ma n t i y t on e c r ig t h e l e ie t s n . h e t nt r g tr o t e r a v c e t g t e r mo e mo i i . d i on e_ mia f l e l e h e t GP o a in n n l u l r a i d t e r mo e y z S lc t a d o r mo e c n r l el h n a r o mo i rt e i e t o t l p o e c me a t n t h m— oc o a e fn t n g u c i ,wh l h ef r a c s sa l n o i t e p r m n e i tb e a d e o r l b e ei l. a

手把手教你Android全局触摸事件监听

手把手教你Android全局触摸事件监听

⼿把⼿教你Android全局触摸事件监听Android系统全局触摸事件监听Android触摸全局监听指的是调⽤监听后在任何界⾯都能获取到触摸事件。

要实现这个功能必须要修改源码添加新的接⼝,因为系统默认是不暴露这个⽅法的。

源码监听系统全局触摸事件的类和相关代码:frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java@Overridepublic void registerPointerEventListener(PointerEventListener listener, int displayId) {Slog.i(TAG, "registerPointerEventListener PointerEventListener = " + listener);synchronized (mGlobalLock) {final DisplayContent displayContent = mRoot.getDisplayContent(displayId);if (displayContent != null) {displayContent.registerPointerEventListener(listener);}}}@Overridepublic void unregisterPointerEventListener(PointerEventListener listener, int displayId) {synchronized (mGlobalLock) {final DisplayContent displayContent = mRoot.getDisplayContent(displayId);if (displayContent != null) {displayContent.unregisterPointerEventListener(listener);}}}第⼀个参数:是中PointerEventListener接⼝,⾥⾯有MotionEvent对象含有点击事件,⽐如DOWN、UP、MOVING等其他信息。

Android开发20——单个监听器监听多个按钮点击事件共6页

Android开发20——单个监听器监听多个按钮点击事件共6页

Android开发20——单个监听器监听多个按钮点击事件一、单个按钮点击事件的监听方法一1.* 从网络上获取图片2.* @author 徐越3.public class MainActivity extends Activity4.private EditText txtPath;5.private Button btnShowImage;6.private ImageView imgView;7.@Override8.public void onCreate(Bundle savedInstanceState)9.super.onCreate(savedInstanceState);10.setContentView(yout.main);11.txtPath = (EditText) this.findViewById(R.id.txtPath);12.btnShowImage = (Button) this.findViewById(R.id.btnShowImage);13.imgView = (ImageView) this.findViewById(R.id.imgView);14.btnShowImage.setOnClickListener(new ShowImageListener());15.private final class ShowImageListener implementsView.OnClickListener16.@Override17.public void onClick(View v)18.// 图片路径19.String path = txtPath.getText().toString();20.try21.// 获取图片的二进制数据22.byte[] imgdata = ImageService.getImage(path);23.// 利用Bitmap工厂生成Bitmap24.Bitmap bitmap = BitmapFactory.decodeByteArray(imgdata, 0, imgdata.length);25.// imageView接收Bitmap并显示26.imgView.setImageBitmap(bitmap);27.catch (Exception e)28.Toast.makeText(MainActivity.this, "读取图片失败", Toast.LENGTH_SHORT).show();方法二在布局页面中给该按钮加上android:onClick="showImage",然后再显示该元素的Activity中加入showImage(View v)的方法,在该方法中进行操作。

Android的事件处理机制之基于监听的事件处理

Android的事件处理机制之基于监听的事件处理

Android的事件处理机制之基于监听的事件处理⽆论是桌⾯应⽤还是⼿机应⽤程序,⾯对⽤户的使⽤,经常需要处理的便是⽤户的各种动作,也就是需要为⽤户动作提供响应,这种为⽤户动作提供响应的机制就是事件处理。

⽽Android为我们提供了两套强⼤的响应机制:基于监听的事件处理和基于回调的事件处理。

本⽂这次讨论的便是基于监听的事件处理。

对于Android基于监听的事件处理⽽⾔,主要做法就是为Android界⾯组件绑定特定的事件监听器,除此之外Android还允许在界⾯⽂件为UI组件的android:onClick属性指定事件监听⽅法,通过这种⽅式指定监听⽅法时,开发者需要在activity中定义该事件监听⽅法,当⽤户单击该UI组件时,系统将会激发android:onClick属性所指定的⽅法。

监听的处理模型基于监听的事件处理是⼀种更“⾯向对象”的事件处理,这种处理⽅式与Java的AWT、Swing的处理⽅式⼏乎完全相同。

在事件的处理模型中,主要涉及以下三类对象:Event Source(事件源):事件发⽣的场所,通常就是各个组件,例如按钮、窗⼝、菜单等Event(事件):事件封装了界⾯组件上发⽣的特定事情(通常就是⼀次⽤户操作)。

如果程序需要获得界⾯组件上所发⽣事件的相关信息。

⼀般通过Event来取得。

Event Listener(事件监听器):负责监听事件源所发⽣的事件,并对各种事件做出相应的响应。

⽽这些响应动作实际上就是⼀系列程序语句,通常以⽅法的形式组织起来,作为事件监听器的核⼼——这些⽅法也被称为事件处理器(Event Handler);当⽤户按下⼀个按钮或者⼀个菜单项时,这些动作便会激发⼀个相应的事件,该事件就会触发事件源上注册的事件监听器,事件监听器调⽤对应的事件处理器来做出相应的相应。

基于监听的事件处理机制是⼀种委派式(Delegation)事件处理⽅式:普通组件(事件源)将整个事件处理委托给特定对象(事件监听器);当该事件源发⽣指定事件时,就通知所委派的事件监听器,由事件监听器来处理整个事件。

Android教程之开机流程全面解析

Android教程之开机流程全面解析

Android教程之开机流程全⾯解析本⽂详细讲述了Android的开机流程。

分享给⼤家供⼤家参考,具体如下:开机过程中⽆线模块的初始化过程;如果sim卡锁开启,或者pin被锁住的时候,会要求输⼊pin或者puk,但是这个解锁动作必须在系统初始化完成以后才能进⾏。

(图形系统都还没有初始化怎么输⼊密码阿?)当系统初始化完成以后会调⽤wm.systemReady()来通知⼤家。

这时候该做什么就做什么。

开机过程中⽆线模块的初始化过程:rild 调⽤参考实现 Reference-ril.c (hardware\ril\reference-ril) 中的函数:const RIL_RadioFunctions *RIL_Init(const struct RIL_Env *env, int argc, char **argv)ret = pthread_create(&s_tid_mainloop, &attr, mainLoop, NULL);static void *mainLoop(void *param)ret = at_open(fd, onUnsolicited);RIL_requestTimedCallback(initializeCallback, NULL, &TIMEVAL_0);在 initializeCallback 函数中对猫进⾏了初始化。

static void initializeCallback(void *param){ATResponse *p_response = NULL;int err;setRadioState (RADIO_STATE_OFF);at_handshake();/* note: we don't check errors here. Everything important willbe handled in onATTimeout and onATReaderClosed *//* atchannel is tolerant of echo but it must *//* have verbose result codes */at_send_command("ATE0Q0V1", NULL);/* No auto-answer */at_send_command("ATS0=0", NULL);/* Extended errors */at_send_command("AT+CMEE=1", NULL);/* Network registration events */err = at_send_command("AT+CREG=2", &p_response);/* some handsets -- in tethered mode -- don't support CREG=2 */if (err < 0 || p_response->success == 0) {at_send_command("AT+CREG=1", NULL);}at_response_free(p_response);/* GPRS registration events */at_send_command("AT+CGREG=1", NULL);/* Call Waiting notifications */at_send_command("AT+CCWA=1", NULL);/* Alternating voice/data off */at_send_command("AT+CMOD=0", NULL);/* Not muted */at_send_command("AT+CMUT=0", NULL);/* +CSSU unsolicited supp service notifications */at_send_command("AT+CSSN=0,1", NULL);/* no connected line identification */at_send_command("AT+COLP=0", NULL);/* HEX character set */at_send_command("AT+CSCS=\"HEX\"", NULL);/* USSD unsolicited */at_send_command("AT+CUSD=1", NULL);/* Enable +CGEV GPRS event notifications, but don't buffer */at_send_command("AT+CGEREP=1,0", NULL);/* SMS PDU mode */at_send_command("AT+CMGF=0", NULL);#ifdef USE_TI_COMMANDSat_send_command("AT%CPI=3", NULL);/* TI specific -- notifications when SMS is ready (currently ignored) */at_send_command("AT%CSTAT=1", NULL);#endif /* USE_TI_COMMANDS *//* assume radio is off on error */if (isRadioOn() > 0) {setRadioState (RADIO_STATE_SIM_NOT_READY);}}默认状况下假设射频模块是好的,通过 setRadioState (RADIO_STATE_SIM_NOT_READY) 来触发对⽆线模块的初始化。

Android监听应用前后台切换实例代码

Android监听应用前后台切换实例代码

Android监听应⽤前后台切换实例代码前⾔这周接到⼀个需求,需要在应⽤从后台切换到前台时,展⽰我们的⼴告。

展⽰页⾯其实可以复⽤以前的开屏⼴告页,唯⼀的问题就是如何监听应⽤从后台切到了前台。

正⽂在众多⽅法中,我采⽤了以下这种⽅式。

废话不多说,咱们直接看代码://⾃定义Application类public class MyApplication extends Application在清单⽂件中声明<applicationandroid:name=".MyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme">在MyApplication⾥重写onTrimMemory⽅法:@Overridepublic void onTrimMemory(int level) {super.onTrimMemory(level);if (level == TRIM_MEMORY_UI_HIDDEN) {isBackGround = true;Log.i("bo", "APP遁⼊后台");}}onTrimMemory⽅法为开发者提供了⼀个合适的时机,⽤来释放掉⼀些不⽤的资源,从⽽让我们的应⽤在后台存活更长时间。

其中level参数就代表我们的应⽤当前在内存中的状态,TRIM_MEMORY_UI_HIDDEN代表应⽤从前台切到了后台。

这个时候我们便可以标记应⽤切换到了后台。

接下来需要监听应⽤在什么时候回到了前台:registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {}@Overridepublic void onActivityStarted(Activity activity) {}@Overridepublic void onActivityResumed(Activity activity) {if (isBackGround) {isBackGround = false;Log.i("bo", "APP回到了前台");}}@Overridepublic void onActivityPaused(Activity activity) {}@Overridepublic void onActivityStopped(Activity activity) {}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityDestroyed(Activity activity) {}});我们使⽤registerActivityLifecycleCallbacks来监听所有Activity的⽣命周期回调,并在onActivityResumed⽅法中进⾏判断:调⽤了Activity的onResume⽅法,并且已经标记为后台状态,那么就可以判断APP回到了前台。

android电话状态监听(来电和去电)实现代码

android电话状态监听(来电和去电)实现代码

android电话状态监听(来电和去电)实现代码实现⼿机电话状态的监听,主要依靠两个类:TelephoneManger和PhoneStateListener。

TelephonseManger提供了取得⼿机基本服务的信息的⼀种⽅式。

因此应⽤程序可以使⽤TelephonyManager来探测⼿机基本服务的情况。

应⽤程序可以注册listener来监听电话状态的改变。

我们不能对TelephonyManager进⾏实例化,只能通过获取服务的形式:Context.getSystemService(Context.TELEPHONY_SERVICE);注意:对⼿机的某些信息进⾏读取是需要⼀定许可(permission)的。

主要静态成员常量:(它们对应PhoneStateListener.LISTEN_CALL_STATE所监听到的内容)int CALL_STATE_IDLE 空闲状态,没有任何活动。

int CALL_STATE_OFFHOOK 摘机状态,⾄少有个电话活动。

该活动或是拨打(dialing)或是通话,或是 on hold。

并且没有电话是ringing or waitingint CALL_STATE_RINGING 来电状态,电话铃声响起的那段时间或正在通话⼜来新电,新来电话不得不等待的那段时间。

⼿机通话状态在⼴播中的对应值EXTRA_STATE_IDLE 它在⼿机通话状态改变的⼴播中,⽤于表⽰CALL_STATE_IDLE状态EXTRA_STATE_OFFHOOK 它在⼿机通话状态改变的⼴播中,⽤于表⽰CALL_STATE_OFFHOOK状态EXTRA_STATE_RINGING 它在⼿机通话状态改变的⼴播中,⽤于表⽰CALL_STATE_RINGING状态ACTION_PHONE_STATE_CHANGED 在⼴播中⽤ACTION_PHONE_STATE_CHANGED这个Action来标⽰通话状态改变的⼴播(intent)。

Android开发之基于监听的事件处理

Android开发之基于监听的事件处理

Android开发之基于监听的事件处理在Android 应⽤开发过程中,常⽤监听事件如下:(1) ListView事件监听setOn ItemSelectedListener:⿏标滚动时触发setOnItemClickListener: 点击时触发(2 )EditText 事件监听setOnKeyListener: 获取焦点时触发(3) RadioGroup事件监听setOnCheckedChangeListener: 点击时触发(4) CheckBox事件监听setOnCheckedChangeListener :点击时触发(5 )Spinner事件监听setOnltemSelectedListener:点击时触发(6) DatePicker 事件监听onDateChangedListener:⽇期改变时触发(7 )DatePickerDialog 事件监听onDateSetListener:设置⽇期时触发(8) TimePicker 事件监听onTimeChangedListener:时间改变时触发(9 )TimePickerDialog 事件监听onTimeSetListener: 设置时间时触发(10)Button.ImageButton 事件监听setOnClickListener: 点击时触发(11)Menu 事件监听onOptionsltemSelected; 点击时触发(12 )Gallery 事件监听setOnItemClickListener: 点击时触发(13 )GridView 事件监听setOnltemClickListener: 点击时触发实现事件监听器的⽅法:内部类形式外类类形式Activity本⾝作为事件监听器类匿名内部类形式直接绑定到标签内部类形式将事件监听器类定义在当前类的内部public class Test extends Activity{@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Button button = (Button)findViewById(R.id.about);MyButtonlistener listener = new MyButtonlistener();button.setOnClickListener(listener);}class MyButtonlistener implements View.OnClickListener{@Overridepublic void onClick(View v) {//相关事件处理}}}外类类形式Test类public class Test extends Activity{@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.activity_main);Button button = (Button)findViewById(R.id.about);MyButtonlistener listener = new MyButtonlistener();button.setOnClickListener(listener);}}MyButtonlistener类public class MyButtonlistener implements View.OnClickListener {@Overridepublic void onClick(View v) {//事件处理}}Activity本⾝作为事件监听器类 将Activity本⾝作为事件监听器类public class Test extends Activity implements View.OnClickListener{ @Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.activity_main);Button button = (Button)findViewById(R.id.about);button.setOnClickListener(this);}@Overridepublic void onClick(View v) {//事件处理}}匿名内部类形式public class Test extends Activity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.activity_main);Button button = (Button)findViewById(R.id.about);button.setOnClickListener(new View.OnClickListener() { @Overridepublic void onClick(View v) {//事件处理}});}}直接绑定到标签在xml的布局⽂件中加⼊onClick属性,设置相关的⽅法定义⼀个⽅法,记得参数是View。

Android开发广播监听系统的各种状态

Android开发广播监听系统的各种状态

Android开发⼴播监听系统的各种状态前⾔ 此篇博客⽤于记录系统的各种⼴播状态⼴播监听开机 注册静态⼴播<receiver android:name=".receiver.MyReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter></receiver> 添加权限 <!-- 接收开机⼴播的权限,开机是很危险的⾏为,所以需要此权限 --><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 接收⼴播public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){L.e("设备开机了");}}}⼴播监听关机 注册静态⼴播<receiver android:name=".receiver.ShutdownReceiver"><intent-filter><action android:name="android.intent.action.ACTION_SHUTDOWN"/></intent-filter></receiver> 接收⼴播public class ShutdownReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals("android.intent.action.ACTION_SHUTDOWN")){L.e("设备关机了...");}}}⽹络变化⼴播注册IntentFilter networkChangeFilter = new IntentFilter();networkChangeFilter.addAction(".conn.CONNECTIVITY_CHANGE");NetWorkChangeReceiver netWorkChangeReceiver = new NetWorkChangeReceiver();//⽹络变化⼴播registerReceiver(netWorkChangeReceiver, networkChangeFilter);接收public class NetWorkChangeReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent == null) {return;}String action = intent.getAction();if (TextUtils.isEmpty(action)) {return;}if (!TextUtils.equals(action, ConnectivityManager.CONNECTIVITY_ACTION)) {return;}// 监听⽹络连接,包括wifi和移动数据的打开和关闭,以及连接上可⽤的连接都会接到监听Log.i("hcz", " CONNECTIVITY_ACTION ");//获取联⽹状态的NetworkInfo对象NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);if (info == null) {return;}if (NetworkInfo.State.CONNECTED != info.getState() || !info.isAvailable()) {EventBus.getDefault().post(new NetChangerEvent(false));return;}int type = info.getType();//如果当前的⽹络连接成功并且⽹络连接可⽤if (type == ConnectivityManager.TYPE_WIFI || type == ConnectivityManager.TYPE_MOBILE) { Log.i("hcz", getConnectionType(info.getType()) + "连上");EventBus.getDefault().post(new NetChangerEvent(true));}}/*** 获取连接类型** @param type type* @return String*/private String getConnectionType(int type) {String connType = "";if (type == ConnectivityManager.TYPE_MOBILE) {connType = "3G⽹络数据";} else if (type == ConnectivityManager.TYPE_WIFI) {connType = "WIFI⽹络";}return connType;}}时间变化⼴播注册IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(Intent.ACTION_TIME_TICK); //时间变化⼴播registerReceiver(new TimeChangeReceiver(), intentFilter);接收public class TimeChangeReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(Intent.ACTION_TIME_TICK)) {LogUtils.d("时间变化");}}}灭屏Or亮屏监听注册mPowerReceiver = PowerReceiver()val intent = IntentFilter()intent.addAction(Intent.ACTION_SCREEN_ON)intent.addAction(Intent.ACTION_SCREEN_OFF)registerReceiver(mPowerReceiver, intent)监听public class PowerReceiver extends BroadcastReceiver { @Overridepublic void onReceive(Context context, Intent intent) { Log.e("ytzn", "onReceive: " + intent.getAction());}}end。

Android实现监听的四种方法详解实例代码

Android实现监听的四种方法详解实例代码

Android实现监听的四种⽅法详解实例代码直接上代码,⼤家可以参考下(1)⾃⾝类作为事件监听器package .gdmec.s0*******.work5;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Button btn1 = (Button) findViewById(R.id.btn1);btn1.setText("单击");btn1.setOnClickListener(this);}@Overridepublic void onClick(View v) {Toast.makeText(this,"已单击我...",Toast.LENGTH_SHORT).show();System.out.println("已单击我...");}}(2)外部类作为事件监听器:package .gdmec.s0*******.work5;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class Act2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_act2);Button btn2 = (Button) findViewById(R.id.btn2);btn2.setText("单击");btn2.setOnClickListener(new OuterClass("已单击我..."));}}class OuterClass implements View.OnClickListener{private String str="已单击我....";public OuterClass(String str){super();this.str=str;}@Overridepublic void onClick(View v) {System.out.println(str);}}(3)内部类作为事件监听器:package .gdmec.s0*******.work5;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class Act3 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_act3);Button btn3 = (Button) findViewById(R.id.btn3);btn3.setText("单击");btn3.setOnClickListener(new OuterClass());}class OuterClass implements View.OnClickListener{@Overridepublic void onClick(View v) {Toast.makeText(Act3.this,"已单击我...",Toast.LENGTH_SHORT).show();System.out.println("已单击我...");}}}(4)匿名类作为事件监听器:package .gdmec.s0*******.work5;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class Act4 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_act4);Button btn4 = (Button) findViewById(R.id.btn4);btn4.setText("单击");btn4.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(Act4.this,"已单击我...",Toast.LENGTH_SHORT).show();System.out.println("已单击我...");}});}}以上四种⽅法之后,在xml⽂件中给每⼀个事件即activity⾥⾯定义多⼀个android label即可。

Android系统语言切换监听和设置实例代码

Android系统语言切换监听和设置实例代码

Android系统语⾔切换监听和设置实例代码最近项⽬上产品经理提了个需求,要求关闭语⾔国际化,不管⼿机系统设置那个国家的语⾔,都要显⽰汉语,好吧,既然有需求,那就做吧。

但是项⽬中已经有英⽂的配置了,且是作为默认String提供的,这么多翻译好的⽂字,直接删除掉替换成中⽂为默认String⼜感觉弃之可惜。

故⽹上Google下解决⽅案。

就开始往下看吧。

⼀、代码中动态设置应⽤显⽰语⾔(⼿动控制使⽤values-zh-rCN下字符串)这个⽅法是通过改变Resource中的配置来实现的,代码如下:public static void initAppLanguage(Context context) {if (context == null) {return;}Locale.setDefault(Locale.CHINA);Configuration config = context.getResources().getConfiguration();config.locale = Locale.CHINA;context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());}上⾯⽅法我们可以在MyApplication中设置也可以在Activity的基类中调⽤但是上⾯的⽅法还是不⾜以让我们的应⽤⼀直显⽰指定的某种语⾔⽂字的。

因为我们的应⽤在运⾏阶段中,系统语⾔发⽣了改变后,我们的应⽤还是会被切换语⾔的,如果没有指定语⾔,就显⽰默认的语⾔。

这肯定不是我们要看到的结果,那就到了标题中提到的语⾔切换监听了。

⼆、语⾔切换监听1.⼴播⽅式监听我们可以通过监听系统⼴播来实现(⼴播静态注册动态注册都可以,动态注册把握好注册时机)/*** ClassName: LocaleChangeReceiver* Description:(这⾥⽤⼀句话描述这个类的作⽤)* Created by chensf on 2016-8-17 16:47.*/public class LocaleChangeReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.v(TAG, "mReceiver onReceive intent.getAction(): "+intent.getAction());if(intent.getAction().equals(Intent.ACTION_LOCALE_CHANGED)) {Log.e("LocaleChangeReceiver","Language change");SystemUtil.initAppLanguage(context);}}}这⾥我们通过监听Intent.ACTION_LOCALE_CHANGED⼴播,在系统语⾔切换后我们会得到通知,然后就爱⼲嘛⼲嘛了,这⾥我通过调⽤上⾯提到的设置语⾔⽅法,将语⾔设置为初始设定语⾔。

Android监听WiFi的开关状态实现代码

Android监听WiFi的开关状态实现代码

Android监听WiFi的开关状态实现代码Android 监听WiFi的开关状态实现代码WifiSwitch_Presenter 源码:package com.yiba.wifi.sdk.lib.presenter;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import .wifi.WifiManager;/*** Created by ${zhaoyanjun} on 2017/3/29.* Wifi 开关监听*/public class WifiSwitch_Presenter {private Context mContext ;private Receiver receiver ;private WifiSwitch_Interface mInterface ;public WifiSwitch_Presenter( Context context , WifiSwitch_Interface mInterface ){this.mContext = context ;this.mInterface = mInterface ;observeWifiSwitch();}private void observeWifiSwitch(){IntentFilter filter = new IntentFilter();filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);receiver = new Receiver() ;mContext.registerReceiver(receiver, filter);}/*** 释放资源*/public void onDestroy(){if ( receiver != null ){mContext.unregisterReceiver( receiver );}if (mContext!=null){mContext = null;}}class Receiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);switch (wifiState) {case WifiManager.WIFI_STATE_DISABLED:if (mInterface != null){mInterface.wifiSwitchState(WifiSwitch_Interface.WIFI_STATE_DISABLED);}break;case WifiManager.WIFI_STATE_DISABLING:if (mInterface != null){mInterface.wifiSwitchState(WifiSwitch_Interface.WIFI_STATE_DISABLING);}break;case WifiManager.WIFI_STATE_ENABLED:if (mInterface != null){mInterface.wifiSwitchState(WifiSwitch_Interface.WIFI_STATE_ENABLED);}break;case WifiManager.WIFI_STATE_ENABLING:if ( mInterface != null ) {mInterface.wifiSwitchState(WifiSwitch_Interface.WIFI_STATE_ENABLING);}break;case WifiManager.WIFI_STATE_UNKNOWN:if ( mInterface != null ){mInterface.wifiSwitchState( WifiSwitch_Interface.WIFI_STATE_UNKNOWN ); }break;}}}}WifiSwitch_Interface 源码package com.yiba.wifi.sdk.lib.presenter;/*** Created by ${zhaoyanjun} on 2017/3/29.* Wifi 开关监听*/public interface WifiSwitch_Interface {int WIFI_STATE_ENABLING = 0 ;int WIFI_STATE_ENABLED = 1 ;int WIFI_STATE_DISABLING = 2 ;int WIFI_STATE_DISABLED = 3 ;int WIFI_STATE_UNKNOWN = 4 ;void wifiSwitchState( int state );}使⽤⽅式 MainActivity :package com.yiba.core;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements WifiSwitch_Interface { private WifiSwitch_Presenter wifiSwitch_presenter ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);wifiSwitch_presenter = new WifiSwitch_Presenter( this , this ) ;}@Overridepublic void wifiSwitchState(int state) {switch ( state ){case WifiSwitch_Interface.WIFI_STATE_DISABLED :Toast.makeText(this, "WiFi 已经关闭", Toast.LENGTH_SHORT).show();break;case WifiSwitch_Interface.WIFI_STATE_DISABLING:Toast.makeText(this, "WiFi 正在关闭", Toast.LENGTH_SHORT).show();break;case WifiSwitch_Interface.WIFI_STATE_ENABLED :Toast.makeText(this, "WiFi 已经打开", Toast.LENGTH_SHORT).show();break;case WifiSwitch_Interface.WIFI_STATE_ENABLING :Toast.makeText(this, "WiFi 正在打开", Toast.LENGTH_SHORT).show();break;}}@Overrideprotected void onDestroy() {super.onDestroy();//释放资源if ( wifiSwitch_presenter != null ){wifiSwitch_presenter.onDestroy();}}}感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。

Android监听锁屏、解锁、开屏操作

Android监听锁屏、解锁、开屏操作

Android监听锁屏、解锁、开屏操作1、⾸先定义 ScreenListenerpackage com.app.lib;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.PowerManager;/*** Created by ${zyj} on 2016/6/21.*/public class ScreenListener {private Context mContext;private ScreenBroadcastReceiver mScreenReceiver;private ScreenStateListener mScreenStateListener;public ScreenListener(Context context) {mContext = context;mScreenReceiver = new ScreenBroadcastReceiver();}/*** screen状态⼴播接收者*/private class ScreenBroadcastReceiver extends BroadcastReceiver {private String action = null;@Overridepublic void onReceive(Context context, Intent intent) {action = intent.getAction();if (Intent.ACTION_SCREEN_ON.equals(action)) { // 开屏mScreenStateListener.onScreenOn();} else if (Intent.ACTION_SCREEN_OFF.equals(action)) { // 锁屏mScreenStateListener.onScreenOff();} else if (Intent.ACTION_USER_PRESENT.equals(action)) { // 解锁mScreenStateListener.onUserPresent();}}}/*** 开始监听screen状态** @param listener*/public void begin(ScreenStateListener listener) {mScreenStateListener = listener;registerListener();getScreenState();}/*** 获取screen状态*/private void getScreenState() {PowerManager manager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);if (manager.isScreenOn()) {if (mScreenStateListener != null) {mScreenStateListener.onScreenOn();}} else {if (mScreenStateListener != null) {mScreenStateListener.onScreenOff();}}}/*** 停⽌screen状态监听*/public void unregisterListener() {mContext.unregisterReceiver(mScreenReceiver);}/*** 启动screen状态⼴播接收器*/private void registerListener() {IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_SCREEN_ON);filter.addAction(Intent.ACTION_SCREEN_OFF);filter.addAction(Intent.ACTION_USER_PRESENT);mContext.registerReceiver(mScreenReceiver, filter);}public interface ScreenStateListener {// 返回给调⽤者屏幕状态信息public void onScreenOn();public void onScreenOff();public void onUserPresent();}} 2、使⽤package com.app.lib;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.Toast;public class MainActivity extends AppCompatActivity {private ScreenListener screenListener ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);screenListener = new ScreenListener( MainActivity.this ) ;screenListener.begin(new ScreenListener.ScreenStateListener() {@Overridepublic void onScreenOn() {Toast.makeText( MainActivity.this , "屏幕打开了" , Toast.LENGTH_SHORT ).show(); }@Overridepublic void onScreenOff() {Toast.makeText( MainActivity.this , "屏幕关闭了" , Toast.LENGTH_SHORT ).show(); }@Overridepublic void onUserPresent() {Toast.makeText( MainActivity.this , "解锁了" , Toast.LENGTH_SHORT ).show();}});}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
监听系统开关机
监听系统开关机
在有些时候,是需要我们的程序在开机后能自动运行,在系统即将关闭时, 能写入一些记录到指定的文件里。那么必定会涉及到开机广播监听和关机广 播监听。
开机广播监听:
1.首先看开机广播监听,Android系统启动完成后会发出启动完成广播( android.intent.action.BOOT_COMPLETED),所有注册了接收启动完成广播 的接收器(BroadcastReceiver)都会收到此广播。
2.先写一个继承BroadcastReceiver的类,接收系统启动完成广播。
3.然后随便创建一个MainActivity,并且在AndroidMainfest.xml中注册该活 动。并且在AndroidMainfest.xml中注册广播接收器。
4.最后不要忘记了,添加相应的权限,应用
相关文档
最新文档