`
不夜的星辰
  • 浏览: 88339 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用handler更新dialog显示

阅读更多

通过handler结合Html刷新dialog界面的显示内容:

package com.pro.activity;

import java.util.List;

import com.pro.R;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.text.Html;
import android.text.Spanned;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;

public class SensorCheckActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener,SensorEventListener{

 private SharedPreferences sp;
 private SensorManager sManager;
 private Sensor sensor;
 private Spanned msgMes;
 private TextView textView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  addPreferencesFromResource(R.xml.sensor);
  sp = PreferenceManager.getDefaultSharedPreferences(this);
  sManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//  sensor = sManager.getDefaultSensor(Sensor.TYPE_ALL);
  
 }
 private Handler handler = new Handler(){
  public void handleMessage(android.os.Message msg) {
   switch (msg.what) {
   case Sensor.TYPE_ACCELEROMETER:
    float[] data = (float[]) msg.obj;
//    msgMes = "X轴方向:"+data[0]+"\nY周方向:"+data[1]+"\nZ轴方向:"+data[2];
    msgMes = Html.fromHtml("<br>&nbsp;&nbsp;&nbsp;X轴方向加速度:"+data[0]+"<br>&nbsp;&nbsp;&nbsp;Y周方向加速度:"+data[1]+"<br>&nbsp;&nbsp;&nbsp;Z轴方向加速度:"+data[2]+"<br>");
    textView.setText(msgMes);
    break;
   case Sensor.TYPE_LIGHT:
    float[] light = (float[]) msg.obj;
    msgMes = Html.fromHtml("<br>&nbsp;&nbsp;&nbsp;当前光线强度:"+light[0]+"<br>");
    textView.setText(msgMes);
    break;
   case Sensor.TYPE_MAGNETIC_FIELD:
    float[] magnetic = (float[]) msg.obj;
    msgMes = Html.fromHtml("<br>&nbsp;&nbsp;&nbsp;X轴方向磁感应:"+magnetic[0]+"<br>&nbsp;&nbsp;&nbsp;Y周方向磁感应:"+magnetic[1]+"<br>&nbsp;&nbsp;&nbsp;Z轴方向磁感应:"+magnetic[2]+"<br>");
    textView.setText(msgMes);
    break;
   case Sensor.TYPE_PROXIMITY:
    float[] proximity = (float[]) msg.obj;
    msgMes = Html.fromHtml("<br>&nbsp;&nbsp;&nbsp;当前近距感应值:"+proximity[0]+"<br>");
    textView.setText(msgMes);
    break;
   case Sensor.TYPE_ORIENTATION:
    float[] orientation = (float[]) msg.obj;
    msgMes = Html.fromHtml("<br>&nbsp;&nbsp;&nbsp;X轴方向:"+orientation[0]+"<br>&nbsp;&nbsp;&nbsp;Y周方向:"+orientation[1]+"<br>&nbsp;&nbsp;&nbsp;Z轴方向:"+orientation[2]+"<br>");
    textView.setText(msgMes);
    break;
   case Sensor.TYPE_PRESSURE:
    float[] pressure = (float[]) msg.obj;
    msgMes = Html.fromHtml("<br>&nbsp;&nbsp;&nbsp;当前压力感应值:"+pressure[0]+"<br>");
    textView.setText(msgMes);
    break;
   case Sensor.TYPE_TEMPERATURE:
    float[] temperaure = (float[]) msg.obj;
    msgMes = Html.fromHtml("<br>&nbsp;&nbsp;&nbsp;当前温度感应值:"+temperaure[0]+"<br>");
    textView.setText(msgMes);
    break;

   default:
    break;
   }
  };
 };
 @Override
 protected void onResume() {
  // TODO Auto-generated method stub
  super.onResume();
  sp.registerOnSharedPreferenceChangeListener(this);
//  sManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
  
 }
 @Override
 protected void onStop() {
  // TODO Auto-generated method stub
  super.onStop();
  sp.unregisterOnSharedPreferenceChangeListener(this);
 }
 @Override
 protected void onDestroy() {
  // TODO Auto-generated method stub
  super.onDestroy();
//  sManager.unregisterListener(this);
 }
 @Override
 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
   String key) {
  // TODO Auto-generated method stub
  
 }
 @Override
 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
   Preference preference) {
  if("key_acceleration".equals(preference.getKey())){//加速度
   showDialogView(this, Sensor.TYPE_ACCELEROMETER, (String) preference.getTitle());
  }else if("key_ray".equals(preference.getKey())){//光线
   showDialogView(this, Sensor.TYPE_LIGHT, (String) preference.getTitle());
  }else if("key_dis".equals(preference.getKey())){//近距
   showDialogView(this, Sensor.TYPE_PROXIMITY, (String) preference.getTitle());
  }else if("key_temperature".equals(preference.getKey())){//温度
   showDialogView(this, Sensor.TYPE_TEMPERATURE, (String) preference.getTitle());
  }else if("key_way".equals(preference.getKey())){//方向
   showDialogView(this, Sensor.TYPE_ORIENTATION, (String) preference.getTitle());
  }else if ("key_magnetic".equals(preference.getKey())) {//磁场
   showDialogView(this, Sensor.TYPE_MAGNETIC_FIELD, (String) preference.getTitle());
  }else if("key_pressure".equals(preference.getKey())){//压力
   showDialogView(this, Sensor.TYPE_PRESSURE, (String) preference.getTitle());
  }
  return super.onPreferenceTreeClick(preferenceScreen, preference);
 }
 @Override
 public void onAccuracyChanged(Sensor sensor, int accuracy) {
  // TODO Auto-generated method stub
  
 }
 @Override
 public void onSensorChanged(SensorEvent event) {
  int type = event.sensor.getType();//.accuracy;
  Message message = new Message();
  switch (type) {
  case Sensor.TYPE_ACCELEROMETER://SensorManager.SENSOR_ACCELEROMETER://加速度
   float[] data = new float[3];
   data[0] = event.values[0]; //x
   data[1] = event.values[1]; //y
   data[2] = event.values[2]; //z轴上的加速度
   message.what = type;
   message.obj = data;
   handler.sendMessage(message);
   break;
  case Sensor.TYPE_ORIENTATION://SensorManager.SENSOR_ORIENTATION://方向
   float[] orientation = new float[3];
   orientation[0] = event.values[0]; //x
   orientation[1] = event.values[1]; //y
   orientation[2] = event.values[2]; //z轴上的方向
   message.what = type;
   message.obj = orientation;
   handler.sendMessage(message);
   break;
  case Sensor.TYPE_PROXIMITY://SensorManager.SENSOR_PROXIMITY://距离
   float[] proximity = new float[1];
   proximity[0] = event.values[0]; //
   message.what = type;
   message.obj = proximity;
   handler.sendMessage(message);
   break;
  case Sensor.TYPE_PRESSURE://Sensor.TYPE_PRESSURE://压力
   float[] pressure = new float[1];
   pressure[0] = event.values[0]; //
   message.what = type;
   message.obj = pressure;
   handler.sendMessage(message);
   break;
  case Sensor.TYPE_LIGHT://SensorManager.SENSOR_LIGHT://光线
   float[] light = new float[1];
   light[0] = event.values[0]; //
   message.what = type;
   message.obj = light;
   handler.sendMessage(message);
   break;
  case Sensor.TYPE_TEMPERATURE://SensorManager.SENSOR_TEMPERATURE://温度
   float[] temperature = new float[1];
   temperature[0] = event.values[0]; //
   message.what = type;
   message.obj = temperature;
   handler.sendMessage(message);
   break;
  case Sensor.TYPE_MAGNETIC_FIELD://磁场
   float[] magnetic = new float[3];
   magnetic[0] = event.values[0]; //x
   magnetic[1] = event.values[1]; //y
   magnetic[2] = event.values[2]; //z轴上的磁感应
   message.what = type;
   message.obj = magnetic;
   handler.sendMessage(message);
   break;

  default:
   break;
  }
 }
 /**
  * 显示不同感应器的测试视图
  */
 private void showDialogView(Context ctx,int sensorType,String msgTitle){
  AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
  if(sManager != null){
//   sensor = sManager.getDefaultSensor(Sensor.TYPE_ALL);
   sensor = sManager.getDefaultSensor(sensorType);
   if(sensor != null){
    
    sManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
   }else{//手机不支持此类感应器类型
    msgMes = Html.fromHtml("<br>&nbsp;&nbsp;该手机不支持此类感应器类型");
    builder.setMessage(msgMes);
   }
  }
  textView = new TextView(ctx);
  LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
  textView.setLayoutParams(lp);
  
  builder.setTitle(msgTitle);
  builder.setIcon(R.drawable.icon);
//  builder.setMessage(msgMes);
  builder.setView(textView);
  builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
   
   @Override
   public void onClick(DialogInterface dialog, int which) {
    sManager.unregisterListener(SensorCheckActivity.this);
   }
  });
  builder.show()
  .setOnShowListener(new DialogInterface.OnShowListener() {
   
   @Override
   public void onShow(DialogInterface dialog) {
    textView.setText(msgMes);
   }
  });
  
 }
}

 

分享到:
评论

相关推荐

    进度对话框,使用Handler类来不断更新进度对话框

    总结,本示例主要介绍了如何使用ProgressDialog结合Handler更新进度值,涉及了水平和圆形两种对话框样式,以及如何在后台线程中执行耗时操作并实时更新UI。这些知识对于Android开发者来说是非常基础且实用的技能。在...

    Android-dialog库可以在任意类内调用子线程或ui线程内均可显示

    然而,如果Dialog的创建过程耗时较长,可能会影响用户体验,这时就需要使用子线程来处理,然后通过Handler或`runOnUiThread()`回调到主线程显示Dialog。 Android-dialog库针对这些需求进行了优化,提供了更简洁的...

    安卓Service中弹Dialog

    4. 使用Handler发送消息,将Dialog的显示和关闭操作放入消息处理方法中。 5. 在Dialog的`onShowListener`和`onDismissListener`中,通过Handler发送消息来告知Service Dialog的状态。 6. 在Service的`onDestroy()`...

    安卓进度条loadingprogress相关-App更新之dialog数字进度条.rar

    在App更新场景下,通常会用一个对话框来显示更新进度,以便在后台下载或安装更新时不影响用户对应用的正常使用。创建Dialog可以通过继承`DialogFragment`或直接使用`AlertDialog.Builder`。 3. **异步任务...

    CommonDialog 控件用法

    CommonDialog1.ShowOpen ' 显示打开对话框 End Sub ``` #### 四、常用对话框的实现 ##### 显示“打开”对话框 1. **指定文件过滤器**:通过设置 `Filter` 属性来限制显示的文件类型。 ```vb CommonDialog1....

    Easyui使用Dialog打印

    Dialog是一个模态窗口,通常用于显示一些需要用户交互或确认的信息。在EasyUI中,我们可以通过以下方式创建一个Dialog: ```html &lt;div id="dialog" style="width:800px;height:600px;"&gt; $(function(){ $('#dialog...

    Android中使用Handler实现下载网络图片应用的代码清单.pdf

    `Android中使用Handler实现下载网络图片应用的代码清单`展示了如何使用Handler来实现在后台下载图片并在主线程中更新UI。 首先,我们来看一下`MainActivity.java`中的关键部分: 1. 定义了一个Handler对象: ```...

    dialog弹出提示框

    在Android开发中,`Dialog`是一种非常常见的组件,它用于在主界面之上显示一个临时的窗口,用于向用户展示信息、询问用户或者进行简单的交互。标题"dialog弹出提示框"指的是如何在Android应用中创建和使用对话框来...

    android dialog

    有时我们需要在某个操作完成后再关闭Dialog,可以使用Handler或CountDownTimer实现延迟关闭。 9. **DialogFragment** 在Android 3.0及以上版本,推荐使用`DialogFragment`替代传统的Dialog。DialogFragment是...

    自定义Dialog加载动画

    4. **显示与关闭Dialog**:在需要显示加载动画的地方调用`show()`方法,在任务完成时调用`dismiss()`方法。确保正确处理生命周期,避免在Activity销毁后继续显示Dialog。 5. **自定义样式**:除了布局和动画,还...

    Android实现简洁的APP更新dialog数字进度条

    前言:现在一般的Android软件都是需要不断... 1.Handler机制   2.自定义控件+Canvas绘画   3.自定义dialog  部分代码:  public class NumberProgressBar extends View { /** * 右侧未完成进度条的颜色 */

    Android高级应用源码-自定义列表选择Dialog,适用网络请求数据.zip

    自定义Dialog可以通过继承`AlertDialog.Builder`或直接使用`DialogFragment`来创建。 2. **DialogFragment**: `DialogFragment`是Android支持库中的一个组件,它负责显示一个对话框。相比直接使用`AlertDialog`,...

    DialogHandler:将dialog json放在dialogs文件夹中,并将json名称命名为0-9

    然后,当您在数字小键盘上按该数字时,将显示对话框! JSON语法 { " color " : 2 , " lines " : [ { " portrait " : 12 , " title " : " Rick " , " message " : " We're no strangers to love, {user}! " }...

    基于Android的所有Dialog对话框.zip

    在基于Android的所有Dialog对话框.zip压缩包中,很可能包含了一系列关于Android Dialog使用的示例代码,适用于正在学习Android编程的学生和初入职场的开发者。这个资源支持在Android Studio、IntelliJ IDEA以及...

    android 加载数据或者上传数据时的Dialog,加载或上传完成后消失

    如果在主线程中进行操作,可以使用`Handler`配合`Runnable`来控制Dialog的显示和关闭: ```java final Handler handler = new Handler(); handler.post(new Runnable() { @Override public void run() { // 执行...

    Android Dialog中软键盘的显示与隐藏的示例

    原因在于Dialog的显示与隐藏是通过Handler异步处理的,因此在`dialog.show()`之后立即调用显示软键盘的方法可能会因为时机不对而无效。 为了解决这个问题,我们可以利用Dialog的`setOnShowListener()`方法,设置一...

    自定义dialog源码

    要使Dialog自动消失,可以使用Handler和Runnable。在`onStart`方法中,创建一个Handler并post一个Runnable,Runnable中调用`dismiss()`方法来关闭Dialog。记得在`onStop`中移除Runnable,避免内存泄漏。 4. **监听...

    android自定义dialog和Toast

    3. **显示Dialog**:在需要的地方,实例化自定义Dialog并调用`show`方法将其显示出来。 ```java CustomDialog customDialog = new CustomDialog(); customDialog.show(getSupportFragmentManager(), ...

    安卓Dialog对话框相关-一个显示圆点水平移动加载提示的自定义AlertDialog.rar

    同时,需要设置一个循环机制,比如使用`Handler`和`Runnable`,来持续更新圆点的位置并展示动画。为了防止内存泄漏,还需要在适当的地方移除这个`Runnable`。 此外,`AlertDialog`提供了一些便利的方法,如`...

Global site tag (gtag.js) - Google Analytics