最近,上一个英特尔服务器项目做完,刚好可以歇息一会。便迷上了一下Android 编程,于是想搞个项目自己做一下,想来想去还是与服务器有关,何不把服务器诊断指示灯用手机解读出来,方便一下大家(工程师们),顺便把思路分享给大家。
先来个服务器诊断指示灯简单说明:
服务器系统诊断指示灯是一个及时提示服务器系统状态及问题异常的常用手段。其使用常见于主板启动过程(POST)的状态,硬盘运行状态等。开发人员,测试人员,系统生产整合人员以及终端使用者需要根据指示灯所表示的信息做出判断,并以此快速排除系统故障。
运行界面:
应用流程图如下:
首先应用安装完没有任何数据,用户可以把数据txt文件下载放在SD卡中,然后通过读取txt文件数据输入SharedPreferences ,由于每一个LED代码只表示一个状态,用SharedPreferences 最有效率,而且更新多次统一键值数据在不会重复在SharedPreferences的xml 中,闲话休提,放上代码:
package com.test.guide;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.content.DialogInterface;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.widget.TextView;
import android.content.Context;
import android.content.SharedPreferences;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import com.led.leddiag.R;
public class led_h extends Activity implements Runnable {
private ImageView mImageView01;
private ImageView mImageView02;
private ImageView mImageView03;
private ImageView mImageView04;
private ImageView mImageView05;
private ImageView mImageView06;
private ImageView mImageView07;
private ImageView mImageView08;
private boolean st1=false;
private boolean st2=false;
private boolean st3=false;
private boolean st4=false;
private boolean st5=false;
private boolean st6=false;
private boolean st7=false;
private boolean st8=false;
private String st_h1="0",st_h2="0",st_h3="0",st_h4="0",st_h5="0",st_h6="0",st_h7="0",st_h8="0";
private Button mButton;
private Button mButton1;
private static int[] s1= new int[]{R.drawable.on1,R.drawable.off};
private TextView tv_result;
private String str2,strall;
public int tk=0;
public ProgressDialog myDialog = null;
public ProgressDialog led_h_update_Dialog = null;
SharedPreferences led_h_Shared = null;
private static final int MAX_PROGRESS = 100;
private ProgressDialog mProgressDialog = null;
public final static String FILE_NAME = "led_h.txt";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
mImageView01=(ImageView)findViewById(R.id.mImage01);
mImageView02=(ImageView)findViewById(R.id.mImage02);
mImageView03=(ImageView)findViewById(R.id.mImage03);
mImageView04=(ImageView)findViewById(R.id.mImage04);
mImageView05=(ImageView)findViewById(R.id.mImage05);
mImageView06=(ImageView)findViewById(R.id.mImage06);
mImageView07=(ImageView)findViewById(R.id.mImage07);
mImageView08=(ImageView)findViewById(R.id.mImage08);
// mImageView08=(ImageView)findViewById(R.id.mImage09);
mButton=(Button)findViewById(R.id.mButton);
mButton1=(Button)findViewById(R.id.mButton1);
mButton.setBackgroundResource(R.drawable.led_btn1);
mButton1.setBackgroundResource(R.drawable.led_btn2);
tv_result=(TextView)findViewById(R.id.tv_result);
mImageView01.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(st1==false)
{mImageView01.setImageDrawable(getResources().getDrawable(s1[0]));st1=true;st_h1="1";}
else if(st1==true)
{mImageView01.setImageDrawable(getResources().getDrawable(s1[1]));st1=false;st_h1="0";}
} });
mImageView02.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(st2==false)
{mImageView02.setImageDrawable(getResources().getDrawable(s1[0])); st2=true;st_h2="1";}
else if(st2==true)
{mImageView02.setImageDrawable(getResources().getDrawable(s1[1]));st2=false;st_h2="0";}
} });
mImageView03.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(st3==false)
{mImageView03.setImageDrawable(getResources().getDrawable(s1[0]));st3=true;st_h3="1";}
else if(st3==true)
{mImageView03.setImageDrawable(getResources().getDrawable(s1[1]));st3=false;st_h3="0";}
} });
mImageView04.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(st4==false)
{mImageView04.setImageDrawable(getResources().getDrawable(s1[0])); st4=true;st_h4="1";}
else if(st4==true)
{mImageView04.setImageDrawable(getResources().getDrawable(s1[1]));st4=false;st_h4="0";}
} });
mImageView05.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(st5==false)
{mImageView05.setImageDrawable(getResources().getDrawable(s1[0])); st5=true;st_h5="1";}
else if(st5==true)
{mImageView05.setImageDrawable(getResources().getDrawable(s1[1]));st5=false;st_h5="0";}
} });
mImageView06.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(st6==false)
{mImageView06.setImageDrawable(getResources().getDrawable(s1[0])); st6=true;st_h6="1";}
else if(st6==true)
{mImageView06.setImageDrawable(getResources().getDrawable(s1[1])); st6=false;st_h6="0";}
} });
mImageView07.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(st7==false)
{mImageView07.setImageDrawable(getResources().getDrawable(s1[0])); st7=true;st_h7="1";}
else if(st7==true)
{mImageView07.setImageDrawable(getResources().getDrawable(s1[1])); st7=false;st_h7="0";}
} });
mImageView08.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(st8==false)
{mImageView08.setImageDrawable(getResources().getDrawable(s1[0]));st8=true;st_h8="1";}
else if(st8==true)
{mImageView08.setImageDrawable(getResources().getDrawable(s1[1]));st8=false;st_h8="0"; }
} });
mButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mImageView01.setImageDrawable(getResources() .getDrawable(R.drawable.off));
mImageView02.setImageDrawable(getResources() .getDrawable(R.drawable.off));
mImageView03.setImageDrawable(getResources() .getDrawable(R.drawable.off));
mImageView04.setImageDrawable(getResources() .getDrawable(R.drawable.off));
mImageView05.setImageDrawable(getResources() .getDrawable(R.drawable.off));
mImageView06.setImageDrawable(getResources() .getDrawable(R.drawable.off));
mImageView07.setImageDrawable(getResources() .getDrawable(R.drawable.off));
mImageView08.setImageDrawable(getResources() .getDrawable(R.drawable.off));
st_h1="0";st_h2="0";st_h3="0";st_h4="0";st_h5="0";st_h6="0";st_h7="0";st_h8="0";
tv_result.setText("");
tv_result.setBackgroundColor(android.graphics.Color.WHITE);
} });
mButton1.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
myDialog = ProgressDialog.show( led_h.this, "系统诊断","查询中,请稍候", true );
new Thread()
{
public void run()
{
try
{
sleep(1000);
}
catch (Exception e)
{
e.printStackTrace();
} finally
{ // 卸除所建立的myDialog对象。
myDialog.dismiss();
}
}
}.start(); /* 开始执行线程 */
strall=st_h1+st_h2+st_h3+st_h4+st_h5+st_h6+st_h7+st_h8;
tk=Integer.parseInt(strall,2);
str2=Integer.toHexString(tk);
tv_result.setText("\n查询值 "+str2.toUpperCase()+" 系统信息是: \n"+find_led(str2));
tv_result.setTextColor(android.graphics.Color.BLACK);
// tv_result.setBackgroundColor(android.graphics.Color.CYAN);
tv_result.setBackgroundResource(R.drawable.text_bg);
} });
}
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, 0, 0, R.string.menu_board);
menu.add(0, 1, 1, R.string.menu_led_h_update_sd);
menu.add(0, 2, 2, R.string.menu_about);
menu.add(0, 3, 3, R.string.menu_exit);
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item)
{
super.onOptionsItemSelected(item);
switch(item.getItemId())
{
case 1:
mProgressDialog = new ProgressDialog(led_h.this);
mProgressDialog.setIcon(R.drawable.icon);
mProgressDialog.setTitle("更新进行中");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setMax(MAX_PROGRESS);
mProgressDialog.setButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
mProgressDialog.setButton2("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
mProgressDialog.show();
new Thread(this).start();
break;
case 2:
openOptionsDialog();
break;
case 3:
finish();
break;
}
return true;
}
public String find_led(String str)
{
String str_led="";
if(str.length()==1){str="0"+str;}
str="x"+str;
led_h_Shared = getSharedPreferences("led_h", Context.MODE_PRIVATE);
str_led = led_h_Shared.getString(str,"no information!");
return str_led;
}
private void openOptionsDialog()
{
new AlertDialog.Builder(this)
.setTitle(R.string.menu_about_title)
.setMessage(R.string.menu_about_msg)
.setPositiveButton(R.string.str_ok,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialoginterface, int i)
{
}
}
)
.show();
}
public void run() {
String path = Environment.getExternalStorageDirectory() +"/" + FILE_NAME;
try {
FileInputStream fi = new FileInputStream(path);
BufferedReader br = new BufferedReader(new InputStreamReader(fi));
// String readString = new String();
String rs1=new String();
int i;
int n;
int flag=0;
String r1;
SharedPreferences mShared = null;
mShared = getSharedPreferences("led_h", Context.MODE_PRIVATE);
Editor editor = mShared.edit();
if ((r1 = br.readLine()) != null) {
n=Integer.parseInt(r1,10);
if((100%n)>0)
flag=1;
for(i=0;i<n;i++)
{
try{ Thread.sleep(100);
if(flag==0)
mProgressDialog.incrementProgressBy(100/n);
else if(flag==1)
{
if((n-i)==1)
mProgressDialog.incrementProgressBy(100/n+100%n);
else
mProgressDialog.incrementProgressBy(100/n);
}
rs1=br.readLine();
String s[]=rs1.split(",");
editor.putString(s[0], s[1]);
editor.commit();}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
fi.close();
// return rs1;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// return null;
}
}
运行结果如图
由于SharedPreferences 高效简单特点,用于查询比数据库和单独文件都方便。