阴晴判断-光线传感器 光线传感器

http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=41850&page=1#pid252792

(1)我介绍的是光线感应器(LightSensor),所谓的光线感应器就是可以感应光线强度的一个设备,而我们对他的开发一般是通过感应光线强度的变化。因为这篇文章是android常用的硬件感应器为主题的,那么我就来介绍怎样在android系统使用光线感应器,我说的真机,因为模拟并没有能够模拟出感应器的效果。。

(2)首先android通过一个SensorManager来管理各种感应器,而获得这个管理器的引用必须通过(SensorManager)getSystemService(Context.SENSOR_SERVICE);这句代码来获得。

(3)在android系统中所有的感应器都属于Sensor类的一个实例,并没有继续细分下去,通过这次的主题,你也会发现android对于感应器的处理几乎是一摸一样的。既然都是Sensor类,那么怎么获得相应的感应器呢?这时就需要通过SensorManager来获得,我们通过这句代码来确定我们要获得感应器类型.

sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

很显然我获得的是光线感应器的引用.

(4)既然已经获得相应的感应器的引用,那么我们的怎么用呢?在第一部分我就说到了我们通过感应光线强度的变化,注意是‘变化’。有些人获取已经明白了,既然是变化,我们肯定需要通过监听他,来获得变化。因为我们就需要给我们的感应器加个监听,android提供了两个监听一个是SensorEventListener,另一个SensorListener,因为后者已经在androidAPI上显示过时了,那么我们就不介绍他了。

(5)知道了有哪些感应器监听,那么我们就来介绍下如何给感应器加监听,这时又需要SensorManager,他就是感应器的保姆,很多关于感应器的部分都要靠他。

SensorManager关于加监听的方法有几个:

registerListenr(SensorListener

listenr,intsensors,intrate):已过时

registerListenr(SensorListener

listenr,intsensors):已过时

registerListenr(SensorEventListener

listenr,Sensorsensors,intrate)

registerListenr(SensorEventListener

listenr,Sensorsensors,intrate,Handlerhandler)

因为SensorListener已经过时,那么相应的注册方法,也就过时了。

说下各个参数的意义:

Listener:相应监听器的引用

Sensor:相应的感应器引用

Rate:感应器的反应速度,这个必须是系统提供4个常量之一的:

SENSOR_DELAY_NORMAL:匹配屏幕方向的变化

SENSOR_DELAY_UI:匹配用户接口

SENSOR_DELAY_GAME:匹配游戏

SENSOR_DELAY_FASTEST.:匹配所能达到的最快

Handler:

(6)

要注意的是在android中注册了感应器,也就启用了他,而使用感应器是相当耗电的,这些是为什么感应器的应用没有那么泛滥的主要原因,所以我们必须在我们不需要他的时候,关掉他。怎么关闭呢?注册是启用,那么注销就是关闭了。Android有以下一些注销方法:

unregisterListener(SensorListenerlistener):已过时

unregisterListener(SensorListenerlistener,intsensors):已过时

unregisterListener(SensorEventListenerlistener);

unregisterListener(SensorEventListenerlistener,Sensorsensor);

相应的参数作用,我相信大家也就知道了。

(7)

知道开和关,那么现在就来介绍具体的用!也就是关于SensorEventListener的实现,实现这个监听器必须实现两个方法:一个是onAccuracyChanged(Sensorsensor,intaccuracy),另一个是onSensorChanged(SensorEventevent)。第一个方法是反应速度变化的方法,也就是第五部分的rate变化时的方法.另一个是感应器的值变化的相应的方法。但是需要注意的是,这两个方法是响应的是一起,就是说当感应器发生变化,两个方法都会一起被调用。

下面我介绍下:accuracy的值,也就是那四个常量相应的整数:

SENSOR_DELAY_NORMAL:3

SENSOR_DELAY_UI:2

SENSOR_DELAY_GAME:1

SENSOR_DELAY_FASTEST.:0

讲了一大堆废话,现在介绍SensorEvent类:

他有四个成员变量:

Accuracy:精确值

Sensor:发生变化的感应器

Timestamp:发生的时间,单位是纳秒

Values:发生变化后的值,这个是一个长度为3数组

光线感应器只需要values[0]的值,其他两个都为0.

而values[0]就是我们开发光线感应器所需要的,单位是:lux照度单位

想知道lux的可以查下百度百科:http://baike.baidu.com/view/965777.htm

而android提供了8个不同情况下的:

LIGHT_NO_MOON:晚上没月亮时的lux值==0.001

LIGHT_FULLMOON:晚上满月时的lux值==0.25

LIGHT_CLOUDY:多云天气下的lux值==100.0

LIGHT_SUNRISE:黎明时的lux值==400.0

LIGHT_OVERCAST:阴天的lux值==10000.0

LIGHT_SHADE:阴影下的lux值==20000.0

LIGHT_SUNLIGHT:阳光下的lux值==110000.0

LIGHT_SUNLIGHT_MAX:阳光下的最大lux值==120000.0

大家可以参照这些数据,做出一些相应的应用。

光线传感器演示1

讲了一大堆的理论,那么下面的例子就来展示一下光线感应器的使用.为什么充分展现光感的使用方法,我这个例子写的非常简单,只写了使用光感必须的代码,然后用了几个textView将光线变化的值展现到用户界面。让使用者可以随时的看到光度的变化。

publicclassLightDemoActivityextendsActivityimplementsSensorEventListener{

/**Calledwhentheactivityisfirstcreated.*/

SensorManagersensorManager=null;//传感器管理器引用

SensorlightSensor=null;//光线传感器引用

//各个文本的引用

TextViewaccuracy_view=null;

TextViewvalue_0=null;

TextViewvalue_1=null;

TextViewvalue_2=null;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//获得传感器管理器实例

sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);

//获得光线传感器实例

lightSensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

//获得各个TextView

accuracy_view=(TextView)findViewById(R.id.accuracy);

value_0=(TextView)findViewById(R.id.value_0);

value_1=(TextView)findViewById(R.id.value_1);

value_2=(TextView)findViewById(R.id.value_2);

}

@Override

protectedvoidonPause(){

//TODOAuto-generatedmethodstub

super.onPause();

//注销

sensorManager.unregisterListener(this,lightSensor);

}

@Override

protectedvoidonResume(){

//TODOAuto-generatedmethodstub

super.onResume();

//为传感器管理器注册监听

sensorManager

.registerListener(this,lightSensor,SensorManager.SENSOR_DELAY_NORMAL);

}

@Override

publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){

//TODOAuto-generatedmethodstub

if(sensor.getType()==Sensor.TYPE_LIGHT)

{

//设置将accuracy的值显示到屏幕上

accuracy_view.setText("accuracy:"+accuracy);

}

}

@Override

publicvoidonSensorChanged(SensorEventevent){

//TODOAuto-generatedmethodstub

if(event.sensor.getType()==Sensor.TYPE_LIGHT)

{

//将values的值显示到屏幕上

float[]values=event.values;

value_0.setText("value[0]:"+values[0]);

value_1.setText("value[1]:"+values[1]);

value_2.setText("value[2]:"+values[2]);

}

}

}

下面讲解代码:

//获得传感器管理器实例

sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);

//获得光线传感器实例

lightSensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

这段代码的作用是获得感应器管理器引用,并获得光感感应器应用。

protectedvoidonResume(){

//TODOAuto-generatedmethodstub

super.onResume();

//为传感器管理器注册监听

sensorManager

.registerListener(this,lightSensor,SensorManager.SENSOR_DELAY_NORMAL);

}

这段代码的作用在resume的时候重新注册监听,开启光感

protectedvoidonPause(){

//TODOAuto-generatedmethodstub

super.onPause();

//注销

sensorManager.unregisterListener(this,lightSensor);

}

这段代码的作用是在暂停时注销监听,关闭光感。因为感应器耗电,所以在不用的时候应该关闭他

if(event.sensor.getType()==Sensor.TYPE_LIGHT)

{

//将values的值显示到屏幕上

float[]values=event.values;

value_0.setText("value[0]:"+values[0]);

value_1.setText("value[1]:"+values[1]);

value_2.setText("value[2]:"+values[2]);

}

}

这段代码的作用判断发生改变的是否为光感感应器,然后获得光度值,并将它输出到textView上

光线传感器演示2

第二个例子就是关于光感的具体运用了。因为我现在的所在地正在下雨,我就想说,用光感写一个晴天娃娃。大家都知道动画片里的晴天娃娃可以会因为天气的不同而改变表情。那么我们就可以通过感应光线强度来确定当前的天气情况,并且改变成相应的图片。而想要效果就像手机的晴天娃娃,那么使用widget技术来显示图片,效果就比较有趣了,有时看下手机因为天气而愁眉苦脸,或者开心,也是一件有趣的事。

在demo里面用到了3个类,分别是LightSensorActivity类,MyUpdateService类,UpdateImage类。下面介绍各个类得作用

LightSensorActivity:开启更新服务,关闭更新服务,和让用户输入更新的时间。注:因为开启感应器是耗电的。我们应该让用户可以有选择的余地。

MyUpdateService:这个服务使用了光感,通过判断光度的值,来发送不同的值.通过开启一个线程,不断的发送广播

UpdateImage:通过受到广播,并获得不同值,这些值代表了不同图片。更新widget的图片。

LightSensorActivity.java

packagecom.wjh.mm;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.Toast;

publicclassLightSensorActivityextendsActivityimplementsOnClickListener{

/**Calledwhentheactivityisfirstcreated.*/

Buttonstart_btn=null;

Buttonstop_btn=null;

EditTexttime_edit=null;

Intentintent=null;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

start_btn=(Button)findViewById(R.id.start_btn);

stop_btn=(Button)findViewById(R.id.stop_btn);

time_edit=(EditText)findViewById(R.id.time_edit);

start_btn.setOnClickListener(this);

stop_btn.setOnClickListener(this);}

@Override

publicvoidonClick(Viewv){

//TODOAuto-generatedmethodstub

if(v==start_btn)

{

Stringtime=time_edit.getText().toString();

Log.d("timeStr",time);

inttimeInt=1000;

if(time!=null&&!time.equals(""))

{

timeInt=Integer.parseInt(time);

}else

{

timeInt=1000;

}

Log.d("timeInt",timeInt+"");

if(intent==null)

{

intent=newIntent(LightSensorActivity.this,MyUpdateService.class);

intent.putExtra("time",timeInt);

startService(intent);

}else

{

showToast(this,"这个服务已经开启");

}

}elseif(v==stop_btn)

{

if(intent!=null)

{

stopService(intent);

intent=null;

}else

{

showToast(this,"服务还未开启");

}}}

privatevoidshowToast(Contextcontext,Stringstr)

{

Toast.makeText(context,str,Toast.LENGTH_SHORT).show();

}}

OnClick方法里面代码的作用是判断点击的那个按钮,如果是开始服务按钮,就获得EditText中用户输入的更新时间值,并发送MyUpdateService服务,并开启这个服务。如果是关闭服务按钮,则关闭服务。

MyUpdateService.java

packagecom.wjh.mm;

importandroid.app.Service;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.hardware.Sensor;

importandroid.hardware.SensorEvent;

importandroid.hardware.SensorEventListener;

importandroid.hardware.SensorManager;

importandroid.os.IBinder;

importandroid.util.Log;

publicclassMyUpdateServiceextendsService{

MyThreadmyThread=null;

booleanflag=true;

inttime=1000;

publicIBinderonBind(Intentintent){

//TODOAuto-generatedmethodstub

//获得更新时间,开启线程进行更新

returnnull;}

@Override

publicvoidonStart(Intentintent,intstartId){

//TODOAuto-generatedmethodstub

super.onStart(intent,startId);

time=intent.getIntExtra("time",1000);

Log.d("time",time+"");

MyThreadmyThread=newMyThread();

myThread.start();}

@Override

publicvoidonDestroy(){

//TODOAuto-generatedmethodstub

super.onDestroy();

flag=false;}

classMyThreadextendsThreadimplementsSensorEventListener{

intselect=0;

//获得感应器管理器和光线感应器

SensorManagersensorManager=

(SensorManager)getSystemService(Context.SENSOR_SERVICE);

Sensorlight=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

publicvoidrun()

{

//注册

sensorManager.registerListener(this,light,SensorManager.SENSOR_DELAY_UI);

while(flag)

{

//发送广播

Intentintent=newIntent("com.wjh.mm");

intent.putExtra("select",select);

sendBroadcast(intent);

try{

Thread.sleep(time);

}catch(InterruptedExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

//注销

sensorManager.unregisterListener(this);

}

}

//注销

sensorManager.unregisterListener(this);}

@Override

publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){

//TODOAuto-generatedmethodstub}

@Override

publicvoidonSensorChanged(SensorEventevent){

//TODOAuto-generatedmethodstub

if(event.sensor.getType()==Sensor.TYPE_LIGHT)

{

//获得相应的光的强度值,并设置图片

floatvalue=event.values[0];

if(value<=SensorManager.LIGHT_CLOUDY)

{

select=0;//如果是多云,就选择0

}elseif(value>SensorManager.LIGHT_CLOUDY&&value<=SensorManager.LIGHT_SUNRISE)

{

select=1;//如果是凌晨,就选择1

}elseif(value>SensorManager.LIGHT_SUNRISE&&value<=SensorManager.LIGHT_OVERCAST)

{

select=2;//如果是阴天就选择2

}elseif(value>SensorManager.LIGHT_OVERCAST&&value<=SensorManager.LIGHT_SHADE)

{

select=3;//如果是阴影下,就选择3

}elseif(value>SensorManager.LIGHT_SHADE&&value<=SensorManager.LIGHT_SUNLIGHT)

{

select=4;//如果晴天,就选择4

}}}}}

publicvoidonStart(Intentintent,intstartId){

//TODOAuto-generatedmethodstub

super.onStart(intent,startId);

time=intent.getIntExtra("time",1000);

Log.d("time",time+"");

MyThreadmyThread=newMyThread();

myThread.start();}

这段代码的作用是获得受到更新时间,并开启一个发送广播线程

SensorManagersensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);

Sensorlight=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

这段代码的作用是获得感应器管理器,并获得光感感应器引用

if(event.sensor.getType()==Sensor.TYPE_LIGHT)

{

//获得相应的光的强度值,并设置图片

floatvalue=event.values[0];

if(value<=SensorManager.LIGHT_CLOUDY)

{

select=0;//如果是多云,就选择0

}elseif(value>SensorManager.LIGHT_CLOUDY&&value<=SensorManager.LIGHT_SUNRISE)

{

select=1;//如果是凌晨,就选择1

}elseif(value>SensorManager.LIGHT_SUNRISE&&value<=SensorManager.LIGHT_OVERCAST)

{

select=2;//如果是阴天就选择2

}elseif(value>SensorManager.LIGHT_OVERCAST&&value<=SensorManager.LIGHT_SHADE)

{

select=3;//如果是阴影下,就选择3

}elseif(value>SensorManager.LIGHT_SHADE&&value<=SensorManager.LIGHT_SUNLIGHT)

{

select=4;//如果晴天,就选择4

}}

这段代码的作用是获得光度的值value,并判断其值,来改变图片的选择值select.

while(flag)

{//发送广播

Intentintent=newIntent("com.wjh.mm");

intent.putExtra("select",select);

sendBroadcast(intent)

try{

Thread.sleep(time);

}catch(InterruptedExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

//注销

sensorManager.unregisterListener(this);

}}

光线传感器演示2

第二个例子就是关于光感的具体运用了。因为我现在的所在地正在下雨,我就想说,用光感写一个晴天娃娃。大家都知道动画片里的晴天娃娃可以会因为天气的不同而改变表情。那么我们就可以通过感应光线强度来确定当前的天气情况,并且改变成相应的图片。而想要效果就像手机的晴天娃娃,那么使用widget技术来显示图片,效果就比较有趣了,有时看下手机因为天气而愁眉苦脸,或者开心,也是一件有趣的事。

在demo里面用到了3个类,分别是LightSensorActivity类,MyUpdateService类,UpdateImage类。下面介绍各个类得作用

LightSensorActivity:开启更新服务,关闭更新服务,和让用户输入更新的时间。注:因为开启感应器是耗电的。我们应该让用户可以有选择的余地。

MyUpdateService:这个服务使用了光感,通过判断光度的值,来发送不同的值.通过开启一个线程,不断的发送广播

UpdateImage:通过受到广播,并获得不同值,这些值代表了不同图片。更新widget的图片。

下面给出结构图:

下面讲解代码:

LightSensorActivity.java

package com.wjh.mm;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class LightSensorActivity extends Activity implements OnClickListener {

/** Called when the activity is first created. */

Button start_btn = null;

Button stop_btn = null;

EditText time_edit = null;

Intent intent = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

start_btn = (Button)findViewById(R.id.start_btn);

stop_btn = (Button)findViewById(R.id.stop_btn);

time_edit = (EditText)findViewById(R.id.time_edit);

start_btn.setOnClickListener(this);

阴晴判断-光线传感器 光线传感器
stop_btn.setOnClickListener(this);

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

if(v == start_btn)

{

String time = time_edit.getText().toString();

Log.d("timeStr", time);

int timeInt = 1000;

if(time!=null&&!time.equals(""))

{

timeInt = Integer.parseInt(time);

}else

{

timeInt = 1000;

}

Log.d("timeInt", timeInt+"");

if(intent == null)

{

intent = new Intent(LightSensorActivity.this,MyUpdateService.class);

intent.putExtra("time", timeInt);

startService(intent);

}else

{

showToast(this, "这个服务已经开启");

}

}else if(v == stop_btn)

{

if(intent!=null)

{

stopService(intent);

intent =null;

}else

{

showToast(this,"服务还未开启");

}

}

}

private void showToast(Context context,String str)

{

Toast.makeText(context,str,Toast.LENGTH_SHORT).show();

}

}

复制代码

OnClick方法里面代码的作用是判断点击的那个按钮,如果是开始服务按钮,就获得EditText中用户输入的更新时间值,并发送MyUpdateService服务,并开启这个服务。如果是关闭服务按钮,则关闭服务。

///////////////////////////////////////////////

MyUpdateService.java

package com.wjh.mm;

import android.app.Service;

import android.content.Context;

import android.content.Intent;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.os.IBinder;

import android.util.Log;

public class MyUpdateService extends Service{

MyThread myThread = null;

boolean flag = true;

int time = 1000;

public IBinder onBind(Intent intent) {

// TODO Auto-generated method stub

//获得更新时间,开启线程进行更新

return null;

}

@Override

public void onStart(Intent intent, int startId) {

// TODO Auto-generated method stub

super.onStart(intent, startId);

time = intent.getIntExtra("time", 1000);

Log.d("time", time+"");

MyThread myThread = new MyThread();

myThread.start();

}

@Override

public void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

flag = false;

}

class MyThread extends Thread implements SensorEventListener{

int select = 0;

//获得感应器管理器和光线感应器

SensorManager sensorManager =

(SensorManager)getSystemService(Context.SENSOR_SERVICE);

Sensor light = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

public void run()

{

//注册

sensorManager.registerListener(this, light, SensorManager.SENSOR_DELAY_UI);

while(flag)

{

//发送广播

Intent intent = new Intent("com.wjh.mm");

intent.putExtra("select", select);

sendBroadcast(intent);

try {

Thread.sleep(time);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

//注销

sensorManager.unregisterListener(this);

}

}

//注销

sensorManager.unregisterListener(this);

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

// TODO Auto-generated method stub

}

@Override

public void onSensorChanged(SensorEvent event) {

// TODO Auto-generated method stub

if(event.sensor.getType() == Sensor.TYPE_LIGHT)

{

//获得相应的光的强度值,并设置图片

float value = event.values[0];

if(value<=SensorManager.LIGHT_CLOUDY)

{

select = 0;//如果是多云,就选择0

}else if(value>SensorManager.LIGHT_CLOUDY && value<=SensorManager.LIGHT_SUNRISE)

{

select = 1;//如果是凌晨,就选择1

}else if(value>SensorManager.LIGHT_SUNRISE && value<=SensorManager.LIGHT_OVERCAST)

{

select = 2;//如果是阴天就选择2

}else if(value>SensorManager.LIGHT_OVERCAST && value<=SensorManager.LIGHT_SHADE)

{

select = 3;//如果是阴影下,就选择3

}else if(value>SensorManager.LIGHT_SHADE && value<=SensorManager.LIGHT_SUNLIGHT)

{

select = 4;//如果晴天,就选择4

}

}

}

}

}

//////////////////////////////////////

public void onStart(Intent intent, int startId) {

// TODO Auto-generated method stub

super.onStart(intent, startId);

time = intent.getIntExtra("time", 1000);

Log.d("time", time+"");

MyThread myThread = new MyThread();

myThread.start();

}

这段代码的作用是获得受到更新时间,并开启一个发送广播线程

/////////////////////////////////////

SensorManager sensorManager =

(SensorManager)getSystemService(Context.SENSOR_SERVICE);

Sensor light = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

这段代码的作用是获得感应器管理器,并获得光感感应器引用

/////////////////////////////////////

if(event.sensor.getType() == Sensor.TYPE_LIGHT)

{

//获得相应的光的强度值,并设置图片

float value = event.values[0];

if(value<=SensorManager.LIGHT_CLOUDY)

{

select = 0;//如果是多云,就选择0

}else if(value>SensorManager.LIGHT_CLOUDY && value<=SensorManager.LIGHT_SUNRISE)

{

select = 1;//如果是凌晨,就选择1

}else if(value>SensorManager.LIGHT_SUNRISE && value<=SensorManager.LIGHT_OVERCAST)

{

select = 2;//如果是阴天就选择2

}else if(value>SensorManager.LIGHT_OVERCAST && value<=SensorManager.LIGHT_SHADE)

{

select = 3;//如果是阴影下,就选择3

}else if(value>SensorManager.LIGHT_SHADE && value<=SensorManager.LIGHT_SUNLIGHT)

{

select = 4;//如果晴天,就选择4

}

}

复制代码

这段代码的作用是获得光度的值value,并判断其值,来改变图片的选择值select.

///////////////////////////////////////////////

while(flag)

{

//发送广播

Intent intent = new Intent("com.wjh.mm");

intent.putExtra("select", select);

sendBroadcast(intent);

try {

Thread.sleep(time);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

//注销

sensorManager.unregisterListener(this);

}

}

复制代码

这段代码的作用将图片选择的值select的值通过广播发送出去,通过一个无限循环,不断的发送。

////////////////////////////////

package com.wjh.mm;

import android.appwidget.AppWidgetManager;

import android.appwidget.AppWidgetProvider;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.widget.RemoteViews;

public class UpdateImage extends AppWidgetProvider {

@Override

public void onUpdate(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds) {

// TODO Auto-generated method stub

update(context,appWidgetManager,appWidgetIds,0);

}

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

super.onReceive(context, intent);

//获得图片下标

int position = intent.getIntExtra("select", 0);

//更新

update(context, null, null,position);

}

public static void update(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds,int position)

{

//图片数组

int[] imageIds ={R.drawable.p1,R.drawable.p2,

R.drawable.p3,R.drawable.p4,R.drawable.p5};

//更新View

RemoteViews remoteView =

new RemoteViews(context.getPackageName(), R.layout.table_layout);

//设置图片

remoteView.setImageViewResource(R.id.imageView1,imageIds[position]);

//名字

ComponentName name = new ComponentName(context,UpdateImage.class);

//更新

AppWidgetManager appWidgetManager2 = AppWidgetManager.getInstance(context);

appWidgetManager2.updateAppWidget(name, remoteView);

}

}

///////////////////////////////////

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

super.onReceive(context, intent);

//获得图片下标

int position = intent.getIntExtra("select", 0);

//更新

update(context, null, null,position);

}

复制代码

这段代码的作用,接受受到的信息,并且调用update方法,进行更新

/////////////////////////////////////

public static void update(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds,int position)

{

//图片数组

int[] imageIds ={R.drawable.p1,R.drawable.p2,

R.drawable.p3,R.drawable.p4,R.drawable.p5};

//更新View

RemoteViews remoteView =

new RemoteViews(context.getPackageName(), R.layout.table_layout);

//设置图片

remoteView.setImageViewResource(R.id.imageView1,imageIds[position]);

//名字

ComponentName name = new ComponentName(context,UpdateImage.class);

//更新

AppWidgetManager appWidgetManager2 = AppWidgetManager.getInstance(context);

appWidgetManager2.updateAppWidget(name, remoteView);

}

复制代码

这段代码的作用创建图片数组,创建RemoteView实例,我们通过使用remoteView设置图片来设置widget的图片,并通过AppWidgetManager进行更新

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/63066.html

更多阅读

女性美容知识大全 美容护肤知识大全

女性美容知识大全——简介 “爱美之心人皆有之”,对美的追求,一直令女性为之疯狂。美丽除了气质以外,最重要的就是皮肤美丽。现在就让上海5+5的陈主任给大家介绍一些女性美容知识。女性美容知识大全——方法/步骤女性美容知识大全 1、

钓鱼技巧全攻略 钓鱼小药秘籍

  “内行看门道,外行看热闹”,讲的就是看招。会看,鱼情水情,一目了然;不会看,黑山白水,满眼疑云。会看与不会看,钓技自分高低。钓鱼有八大招式,如能运用自如,自然好处多多。现将八大要招主要做法介绍如下。  一、看天气.  自古以来,

山有木兮木有枝,心悦君兮君不知 类似于山有木兮木有枝

山有木兮木有枝,心悦君兮君不知。一缕钨丝现光明,人间至此隐黑暗。冥冥之中自有天意,正所谓千里姻缘一线牵,有缘千里来相会,无缘对面不相逢。不愿与其共享之,只愿与君齐享之。众里寻他千百度,暮然回首那人却在灯火阑珊时。自古英雄难过美人

情歌变得不好听。 情歌变的不好听

心情不好时,总爱听情歌,听着听着,就开始流泪。我的心像大雨将至那么潮湿。我就像天气一样,阴晴不定。我会很爱很爱未来的那个你,和你一直一直在一起。总会有那么一个人,会等着我,爱着我。我说,我不会再为任何人等待,不会再为任何人停留

作文-人有悲欢离合,月有阴晴圆缺 悲欢离合类似的成语

花雪飘零,大地被白茫茫的雪花覆盖着。维多利加呆在课室里搓着小手,放在嘴前呵气。放眼望去,窗外的雪景耀眼动人,几个小孩在雪堆里玩着打雪仗,小孩灿烂的笑容给寒冷的冬天带来了一丝丝暖意。然而维多利加并没注意到那悄悄靠静的脚步,他仍然

声明:《阴晴判断-光线传感器 光线传感器》为网友行云流浪分享!如侵犯到您的合法权益请联系我们删除