Android 6.0 sensor 框架详解 (application层)

APP的工作流程

概述:本章主要针对对APP无基础的同学,对java不了解的同学,主要帮助大家理解APP的工作方式,给大家阅读APP源码提供一定的思路。大神可以直接跳过。APP的工作流程我们以较简单的EMOD来引导大家入门,理解起来相对直观,且EMOD包含Android常用的编写方法。通过本文的学习,以便于工作在Android底层而没有从事app开发工作的同学能够具备一定的思路和能力去阅读app代码。

首先我们来介绍一下我们这次介绍的APP的基本功能和使用方法。

基本功能:EMOD为工厂模式engineering mode的缩写,主要作用是工厂生产的过程中,使用EMOD对手机的基本功能进行验证。

使用方法:我们在拨号盘输入规定的号码即可打开APP,点击里面的对应选项做相应测试。

首先和大家陈述一点,拨号键盘打开EMOD使用的方法为广播,至于为什么能打开,以及他的实现,本章节不做描述。本章只描述打开EMOD第一个界面之后到获取sensor服务的地方。

首先我们输入自己设定的指令这里保密,例如“123456”进入工厂模式的如下界面,如图:图一。

图一:

点击图一中的“手动”按钮,来到图二所示

图二:

本文主要描述sensor的流程,我们选择一个较简单的sensor 光感距感二合一传感器,我们来看看他在工厂模式里的测试项“接近和光感测试”项,如图三所示

图三:

 

如图三所示:在图三的界面中,我们可以看到sensor数据的变化,以及数据变化后,界面的变化。

至此,我们借助如下的三个问题来学习EMOD APP是如何工作的

问题一:图一到图三,者三个界面上的控件是如何实现的

问题二:这三个界面是如何实现界面跳转的

问题三:第三个界面中,APP是如何获取到sensor的数据并在界面上实现更新的

注意:希望大家在理解完所有的知识点后再看代码,写得不够详细的知识点大家自己找度娘了!

首先补充两个基本知识点:

知识点一

android 的四大组件
activity界面(我们每看到的一个界面,在AndroidAPP中即为一个activity)这里我们只关心activity
BroadcastReceiver广播接收器
Service 后台服务
ContentProvider 内容提供者

android apk 源码的目录功能
这里我们以eclipse软件打开的Android apk源码来介绍一下源码的目录结构,在Android源码中此目录也是大同小异的。
这里只介绍我们看代码经常要看的地方


知识点二

activity的生命周期
void onCreate();第一次创建Activity时被调用
void onStart(); 启动Activity时被调用
void onRestart(); 重新启动Activity时被调用  
void onResume(); 可以进行用户交互时调用
void onPause(); 暂停Activity被调用,可以看到页面,获取不到焦点
void onStop(); 停止Activity时被调用,看不到页面,获取不到焦点
void onDestroy(); 销毁Activity时被调用

知识点三

在activity中我们所看到的按钮,文字,图片,视频等均为控件,在Android app中这些控件所对应的类名为:
按钮 button
文字 textview
图片 imageview
等等...
每个类中都封装好了他们私有的一些方法,如:
textview.setText 设置文字的显示内容
button.setOnClickListener(listener); 设置按钮按下后的处理方法为listener(这里为了便于底层的同学理解,换个说法,这里就像设置中断处理函数一样,把按键按下理解为中断就可以了),listener为OnClickListener类型,我们只要重写里面的onClick方法即可,onClick方法里面就是我们的处理函数的实体了。

知识点四

我们在如何activity中确定这个activity所使用的xml布局文件是哪一个
设置布局的统一方法为:this.setContentView(R.layout.start);

知识点五

定义控件在activity对应xml文件中定义,在xml文件中我们可以设置当前activity的布局格式,控件所处的位置,大小,颜色及控件中的各种内容。

这里注意一点,我们要在xml文件中设置各个控件对应的id,设置好id后,会自动在R.id下生成控件对应的id号(不需要我们手动设置)

例:我们看图一对应的xml文件start.xml

<Button android:id="@+id/manual" android:layout_width="120dip" android:layout_height="wrap_content" />
<Button android:id="@+id/auto" android:layout_width="120dip" android:layout_height="wrap_content" />

start.xml设置了button的id,长和宽。

知识点六

我们在xml文件中定义控件,在java文件中使用控件,获取控件普遍使用的方法为findViewById(R.id.控件id名);

例:findViewById(R.id.auto);

知识点七

字符串通常定义在string.xml文件中,可以使用R.string.字符串名来使用字符串

例:string.xml的一段定义

    <string name="select_mode">"选择测试模式"</string>
    <string name="btn_manual">"手动"</string>
    <string name="btn_auto">"自动"</string>
    <string name="btn_factory_reset">"恢复出厂设置"</string>

使用时:manual.setText(R.string.btn_manual);

R.string.btn_manual得到的字符串就是“手动”,这里有点类似c语言的宏定义,希望能帮助大家理解。

来看问题一(问题二的答案贯穿其中):我们先从图一的界面的代码开始分析

代码块一:

package com.wind.emode;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class startActivity extends Activity {//一个实现界面的类必须是Activity的子类
	Button manual = null;
	Button auto = null;
   	Button result = null;
        Button factory_reset = null;
	TextView title = null;
	int menuIndex = -1;
	int autodetect = 0;
	Intent intent = null;
	protected void onCreate(Bundle savedInstanceState) {//startActivity的入口方法onCreate
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.start);//设置布局文件为start.xml
		manual = (Button) findViewById(R.id.manual);
		auto = (Button) findViewById(R.id.auto);
        result = (Button) findViewById(R.id.result);
                factory_reset = (Button) findViewById(R.id.factory_reset);
                //if(!getResources().getBoolean(R.bool.config_project_t621w)){
                    factory_reset.setVisibility(View.GONE);
                //}
		title = (TextView) findViewById(R.id.start_title);//获取标题控件
		title.setText(R.string.select_mode);//修改标题控件内容<string name="select_mode">"选择测试模式"</string>
		intent = new Intent();

		manual.setText(R.string.btn_manual);//设置按键manual内容为 <string name="btn_manual">"手动"</string>
        result.setText(R.string.btn
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值