通过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> X轴方向加速度:"+data[0]+"<br> Y周方向加速度:"+data[1]+"<br> Z轴方向加速度:"+data[2]+"<br>");
textView.setText(msgMes);
break;
case Sensor.TYPE_LIGHT:
float[] light = (float[]) msg.obj;
msgMes = Html.fromHtml("<br> 当前光线强度:"+light[0]+"<br>");
textView.setText(msgMes);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
float[] magnetic = (float[]) msg.obj;
msgMes = Html.fromHtml("<br> X轴方向磁感应:"+magnetic[0]+"<br> Y周方向磁感应:"+magnetic[1]+"<br> Z轴方向磁感应:"+magnetic[2]+"<br>");
textView.setText(msgMes);
break;
case Sensor.TYPE_PROXIMITY:
float[] proximity = (float[]) msg.obj;
msgMes = Html.fromHtml("<br> 当前近距感应值:"+proximity[0]+"<br>");
textView.setText(msgMes);
break;
case Sensor.TYPE_ORIENTATION:
float[] orientation = (float[]) msg.obj;
msgMes = Html.fromHtml("<br> X轴方向:"+orientation[0]+"<br> Y周方向:"+orientation[1]+"<br> Z轴方向:"+orientation[2]+"<br>");
textView.setText(msgMes);
break;
case Sensor.TYPE_PRESSURE:
float[] pressure = (float[]) msg.obj;
msgMes = Html.fromHtml("<br> 当前压力感应值:"+pressure[0]+"<br>");
textView.setText(msgMes);
break;
case Sensor.TYPE_TEMPERATURE:
float[] temperaure = (float[]) msg.obj;
msgMes = Html.fromHtml("<br> 当前温度感应值:"+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> 该手机不支持此类感应器类型");
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);
}
});
}
}
分享到:
相关推荐
总结,本示例主要介绍了如何使用ProgressDialog结合Handler更新进度值,涉及了水平和圆形两种对话框样式,以及如何在后台线程中执行耗时操作并实时更新UI。这些知识对于Android开发者来说是非常基础且实用的技能。在...
然而,如果Dialog的创建过程耗时较长,可能会影响用户体验,这时就需要使用子线程来处理,然后通过Handler或`runOnUiThread()`回调到主线程显示Dialog。 Android-dialog库针对这些需求进行了优化,提供了更简洁的...
4. 使用Handler发送消息,将Dialog的显示和关闭操作放入消息处理方法中。 5. 在Dialog的`onShowListener`和`onDismissListener`中,通过Handler发送消息来告知Service Dialog的状态。 6. 在Service的`onDestroy()`...
在App更新场景下,通常会用一个对话框来显示更新进度,以便在后台下载或安装更新时不影响用户对应用的正常使用。创建Dialog可以通过继承`DialogFragment`或直接使用`AlertDialog.Builder`。 3. **异步任务...
CommonDialog1.ShowOpen ' 显示打开对话框 End Sub ``` #### 四、常用对话框的实现 ##### 显示“打开”对话框 1. **指定文件过滤器**:通过设置 `Filter` 属性来限制显示的文件类型。 ```vb CommonDialog1....
Dialog是一个模态窗口,通常用于显示一些需要用户交互或确认的信息。在EasyUI中,我们可以通过以下方式创建一个Dialog: ```html <div id="dialog" style="width:800px;height:600px;"> $(function(){ $('#dialog...
`Android中使用Handler实现下载网络图片应用的代码清单`展示了如何使用Handler来实现在后台下载图片并在主线程中更新UI。 首先,我们来看一下`MainActivity.java`中的关键部分: 1. 定义了一个Handler对象: ```...
在Android开发中,`Dialog`是一种非常常见的组件,它用于在主界面之上显示一个临时的窗口,用于向用户展示信息、询问用户或者进行简单的交互。标题"dialog弹出提示框"指的是如何在Android应用中创建和使用对话框来...
有时我们需要在某个操作完成后再关闭Dialog,可以使用Handler或CountDownTimer实现延迟关闭。 9. **DialogFragment** 在Android 3.0及以上版本,推荐使用`DialogFragment`替代传统的Dialog。DialogFragment是...
4. **显示与关闭Dialog**:在需要显示加载动画的地方调用`show()`方法,在任务完成时调用`dismiss()`方法。确保正确处理生命周期,避免在Activity销毁后继续显示Dialog。 5. **自定义样式**:除了布局和动画,还...
前言:现在一般的Android软件都是需要不断... 1.Handler机制 2.自定义控件+Canvas绘画 3.自定义dialog 部分代码: public class NumberProgressBar extends View { /** * 右侧未完成进度条的颜色 */
自定义Dialog可以通过继承`AlertDialog.Builder`或直接使用`DialogFragment`来创建。 2. **DialogFragment**: `DialogFragment`是Android支持库中的一个组件,它负责显示一个对话框。相比直接使用`AlertDialog`,...
然后,当您在数字小键盘上按该数字时,将显示对话框! JSON语法 { " color " : 2 , " lines " : [ { " portrait " : 12 , " title " : " Rick " , " message " : " We're no strangers to love, {user}! " }...
在基于Android的所有Dialog对话框.zip压缩包中,很可能包含了一系列关于Android Dialog使用的示例代码,适用于正在学习Android编程的学生和初入职场的开发者。这个资源支持在Android Studio、IntelliJ IDEA以及...
如果在主线程中进行操作,可以使用`Handler`配合`Runnable`来控制Dialog的显示和关闭: ```java final Handler handler = new Handler(); handler.post(new Runnable() { @Override public void run() { // 执行...
原因在于Dialog的显示与隐藏是通过Handler异步处理的,因此在`dialog.show()`之后立即调用显示软键盘的方法可能会因为时机不对而无效。 为了解决这个问题,我们可以利用Dialog的`setOnShowListener()`方法,设置一...
要使Dialog自动消失,可以使用Handler和Runnable。在`onStart`方法中,创建一个Handler并post一个Runnable,Runnable中调用`dismiss()`方法来关闭Dialog。记得在`onStop`中移除Runnable,避免内存泄漏。 4. **监听...
3. **显示Dialog**:在需要的地方,实例化自定义Dialog并调用`show`方法将其显示出来。 ```java CustomDialog customDialog = new CustomDialog(); customDialog.show(getSupportFragmentManager(), ...
同时,需要设置一个循环机制,比如使用`Handler`和`Runnable`,来持续更新圆点的位置并展示动画。为了防止内存泄漏,还需要在适当的地方移除这个`Runnable`。 此外,`AlertDialog`提供了一些便利的方法,如`...