2周的课程设计花了3天(其实真相是花了2个小时就写好了,只是老师一会让我改这一会让我改那而已)。。这个时间可能有点长了,况且读者们看以下的的题目或许就要开始嘲笑我了,“这么简单的一个东西居然还要用那么久”。。。哈哈,不喜勿吐槽。。。。
题目3、压力监测应用
(1) 检测压力是否超过阈值
(2) 若超过压力阈值,则通过一条短信通知联系人,短信内容需包含当前压力。
(3) 可设置联系人名称和联系手机号码
(4) 可设置压力阈值
(5) 记录告警信息到数据库,方便查询
以下开始直接贴代码:
1、MainAcivity
package com.example.shiyan; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.InputStream; import java.util.List; import com.njupt.db.DBDao; import com.njupt.pojo.Info; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.database.sqlite.SQLiteDatabase; import android.telephony.SmsManager; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { Sensor sensor; private float x, y, z;//用来记录各个方向上的加速度的值 float xLimit = 5; float yLimit = 9;//用来记录y方向上的阈值。这里只是用到了y方向上的阈值 float zLimit = 5; String content;//发短信的内容 String phone = "15951992898";//短信的号码 String smsName = "小明";//联系人名称 String yuzhi;//TextView显示的时候的阈值 SmsManager smsManager; int smsTime = 5; private TextView tv_name; private TextView tv_phone; private TextView tv_yuzhi; private Button bt_name; private Button bt_phone; private Button bt_yuzhi; DBDao dao; public PackageManager pm; int counter = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); smsManager = SmsManager.getDefault(); // 准备显示信息的UI组建 final TextView tx1 = (TextView) findViewById(R.id.tv); // 从系统服务中获得传感器管理器 SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // 在title上显示重力传感器的变化 sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); SensorEventListener lsn = new SensorEventListener() { public void onSensorChanged(SensorEvent e) { x = e.values[SensorManager.DATA_X]; y = e.values[SensorManager.DATA_Y]; z = e.values[SensorManager.DATA_Z]; tx1.setText("x=" + (int) x + "," + "y=" + (int) y + "," + "z=" + (int) z); checkAccelerometer(getApplicationContext(), x, y, z); } public void onAccuracyChanged(Sensor s, int accuracy) { } }; // 注册listener,第三个参数是检测的精确度 sm.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME); tv_name = (TextView) findViewById(R.id.tv_name); tv_phone = (TextView) findViewById(R.id.tv_phone); tv_yuzhi = (TextView) findViewById(R.id.tv_yuzhi); bt_name = (Button) findViewById(R.id.bt_name); bt_phone = (Button) findViewById(R.id.bt_phone); bt_yuzhi = (Button) findViewById(R.id.bt_yuzhi); dao = new DBDao(getApplicationContext()); pm = getPackageManager();//用来获取包名 } //设置联系人名称 public void setName(View view) { Intent i = new Intent(MainActivity.this,SetNameActivity.class); startActivityForResult(i, 100); } //查询历史记录 public void goHistory(View view){ Intent i = new Intent(MainActivity.this,MyListActivity.class); startActivity(i); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode == 10){ String name = data.getExtras().getString("name"); tv_name.setText("联系人名称:" + name); smsName = name; }else if(resultCode == 20){ String phonee = data.getExtras().getString("phone"); tv_phone.setText("联系人号码:" + phonee); phone = phonee; }else if(resultCode == 30){ int yuzhi1 = data.getExtras().getInt("yuzhi"); tv_yuzhi.setText("阈值:" + yuzhi1); yLimit = yuzhi1; } super.onActivityResult(requestCode, resultCode, data); } public void setPhone(View view) { Intent intent = new Intent(MainActivity.this,SetPhoneActivity.class); startActivityForResult(intent, 200); } public void setYuzhi(View view) { Intent intent = new Intent(MainActivity.this,SetYuzhiActivity.class); startActivityForResult(intent, 300); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } /** * 发短信的逻辑 * @param content */ public void sendSms(String content) { // if (smsTime > 0) { // return; // } List<String> texts = smsManager.divideMessage(content); System.out.println("--------->content: " + content); System.out.println("phone:" + phone); for (int i = 0; i < texts.size(); ++i) { smsManager.sendTextMessage(phone, null, content, null, null); System.out.println("短信已发送..."); // smsTime++; } } /** * 检查加速度是否超过了阈值 * @param context * @param x * @param y * @param z */ public void checkAccelerometer(Context context, float x, float y, float z) { if (y > yLimit) { if(counter % 70 == 0){ Toast.makeText( context, "accelerometer已经超过了阈值,这时候的x: " + x + ",y: " + y + ",z: " + z, 0).show(); content = smsName + " 先生/女士,accelerometer已经超过了阈值,这时候的x: " + x + ",y: " + y + ",z: " + z; sendSms(content); Info info = new Info(); info.setName(smsName); info.setX(x); info.setY(y); info.setZ(z); dao.save(info); if(counter > 70){ counter = 0; } }else{ } counter++; } } /** * 将DB文件复制到SD卡中(推荐使用下面一种) * @param context * @param oldName * @param newName */ public void copyDBFile(Context context, String oldName, String newName) { try { PackageInfo info = pm.getPackageInfo(context.getPackageName(), 0); String packageName = info.packageName; FileReader reader = new FileReader("data/data/" + packageName + "/" + "/databases/" + oldName); System.out.println("Environment.getExternalStorageDirectory(): " + Environment.getExternalStorageDirectory()); FileWriter writer = new FileWriter( Environment.getExternalStorageDirectory() + "/" + newName); int ch; while ((ch = reader.read()) != -1) { writer.write(ch); } reader.close(); writer.close(); System.out.println("--------->db文件备份成功..."); } catch (Exception e) { e.printStackTrace(); } } /** * 按钮的单击事件 * @param view */ public void saveDB(View view) { Thread t = new Thread(new Runnable() { @Override public void run() { // copyDBFile(getApplicationContext(), "njupt.db", "njupt.db");//这种方法不行,不知道为什么.. copyDatabaseFile(getApplicationContext(), false); } }); t.start(); Toast.makeText(getApplicationContext(), "DB文件备份成功", 0).show(); } /** * 数据库文件的拷贝... * @param context * @param isfored */ public void copyDatabaseFile(Context context, boolean isfored) { try { PackageInfo info = pm.getPackageInfo(context.getPackageName(), 0); String packageName = info.packageName; File dir = new File("data/data/" + packageName + "/" + "/databases/" + "njupt.db"); if (!dir.exists() || isfored) { try { dir.mkdir(); } catch (Exception e) { e.printStackTrace(); } } File dest = new File(Environment.getExternalStorageDirectory() + "/" + "njupt1.db"); if (dest.exists() && !isfored) { return; } try { if (dest.exists()) { dest.delete(); } dest.createNewFile(); InputStream in = new FileInputStream(dir); int size = in.available(); byte buf[] = new byte[size]; in.read(buf); in.close(); FileOutputStream out = new FileOutputStream(dest); out.write(buf); out.close(); } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } }
2、MyListActivity
package com.njupt.shiyan; import java.util.List; import com.example.shiyan.R; import com.njupt.db.DBDao; import com.njupt.pojo.Info; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; /** * 查询历史记录的Activity * @author Administrator * */ public class MyListActivity extends Activity { private ListView infoLV; List<Info> infos; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list); infoLV = (ListView) findViewById(R.id.infoLV); DBDao dao = new DBDao(this); infos = dao.query(); infoLV.setAdapter(new MyAdapter()); } public class MyAdapter extends BaseAdapter { @Override public int getCount() { return infos.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return infos.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View item = View.inflate(getApplicationContext(), R.layout.item, null);// 根据布局文件创建View(LinearLayout) TextView idTV = (TextView) item.findViewById(R.id.idTV);// 获取这个新生成的View中的TextView TextView nameTV = (TextView) item.findViewById(R.id.nameTV); TextView xTV = (TextView) item.findViewById(R.id.xTV); TextView yTV = (TextView) item.findViewById(R.id.yTV); TextView zTV = (TextView) item.findViewById(R.id.zTV); Info info = infos.get(position);// 根据位置获取Person对象 idTV.setText(info.get_id() + "");// 给TextView设置文本 nameTV.setText(info.getName()); xTV.setText(info.getX() + ""); yTV.setText(info.getY() + ""); zTV.setText(info.getZ() + ""); return item; } } }
3、SetNameActivity
package com.njupt.shiyan; import com.example.shiyan.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class SetNameActivity extends Activity { private EditText et_name; private Button bt_name; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.setname); et_name = (EditText) findViewById(R.id.et_name); bt_name = (Button) findViewById(R.id.bt_name); bt_name.setOnClickListener(new MyOnClickListener()); } class MyOnClickListener implements OnClickListener{ @Override public void onClick(View v) { String name = et_name.getText().toString(); Intent intent = new Intent(); intent.putExtra("name", name); setResult(10, intent); Toast.makeText(getApplicationContext(), "设置联系人名称成功..", 0).show(); finish(); } } }
4、SetPhoneActivity
package com.njupt.shiyan; import com.example.shiyan.R; import com.njupt.utils.Utils; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class SetPhoneActivity extends Activity { private EditText et_phone; private Button bt_phone; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.setphone); et_phone = (EditText) findViewById(R.id.et_phone); bt_phone = (Button) findViewById(R.id.bt_phone); bt_phone.setOnClickListener(new MyOnClickListener1()); } class MyOnClickListener1 implements OnClickListener{ @Override public void onClick(View v) { String phone = et_phone.getText().toString(); if(Utils.checkStringIsNumber(getApplicationContext(), phone) == false){ return ; } Intent intent = new Intent(); intent.putExtra("phone", phone); setResult(20, intent); Toast.makeText(getApplicationContext(), "设置联系人号码成功..", 0).show(); finish(); } } }
5、SetYuzhiActivity
package com.njupt.shiyan; import com.example.shiyan.R; import com.njupt.utils.Utils; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class SetYuzhiActivity extends Activity { private EditText et_yuzhi; private Button bt_yuzhi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.setyuzhi); et_yuzhi = (EditText) findViewById(R.id.et_yuzhi); bt_yuzhi = (Button) findViewById(R.id.bt_yuzhi); bt_yuzhi.setOnClickListener(new MyOnClickListener2()); } class MyOnClickListener2 implements OnClickListener{ @Override public void onClick(View v) { String yuzhi = et_yuzhi.getText().toString(); if(Utils.checkStringIsNumber(getApplicationContext(), yuzhi) == false){ return ; } int yuzhi1 = Integer.parseInt(yuzhi); Intent intent = new Intent(); intent.putExtra("yuzhi", yuzhi1); setResult(30, intent); Toast.makeText(getApplicationContext(), "设置阈值成功..", 0).show(); finish(); } } }
6、SplashActivity
package com.njupt.shiyan; import com.example.shiyan.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.widget.ImageView; public class SplashActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); // 取消状态栏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.splash); ImageView logoImage = (ImageView) findViewById(R.id.iv_logo); AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f); alphaAnimation.setDuration(3000); logoImage.startAnimation(alphaAnimation); alphaAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { Intent intent = new Intent(); intent.setClass(SplashActivity.this,SplashActivity1.class); startActivity(intent); finish(); } }); } }
7、SplashActivity1
package com.njupt.shiyan; import com.example.shiyan.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.widget.ImageView; public class SplashActivity1 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); // 取消状态栏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.splash1); ImageView logoImage = (ImageView) findViewById(R.id.iv_logo); AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f); alphaAnimation.setDuration(3000); logoImage.startAnimation(alphaAnimation); alphaAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { Intent intent = new Intent(); intent.setClass(SplashActivity1.this, MainActivity.class); startActivity(intent); finish(); } }); } }
8、DBDao
package com.njupt.db; import java.util.ArrayList; import java.util.List; import com.njupt.pojo.Info; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class DBDao { DBOpenHelper dbOpenHelper; SQLiteDatabase db; public DBDao(Context context){ this.dbOpenHelper=new DBOpenHelper(context); db = dbOpenHelper.getWritableDatabase(); } /** * 添加一条数据 * @param info */ public void save(Info info){ SQLiteDatabase db=dbOpenHelper.getWritableDatabase(); System.out.println("----->save: " + info.getX() + ", "+info.getY() + ","+info.getZ()); db.execSQL("insert into info(name,x,y,z) values(?,?,?,?)", new Object[]{info.getName(),info.getX(),info.getY(),info.getZ()}); System.out.println("------------>保存成功.x: " + info.getX() + ",y: " + info.getY()); db.close(); } public List<Info> query() { ArrayList<Info> infos = new ArrayList<Info>(); Cursor c = queryTheCursor(); while (c.moveToNext()) { Info info = new Info(); info._id = c.getInt(c.getColumnIndex("_id")); info.name = c.getString(c.getColumnIndex("name")); info.x = c.getFloat(c.getColumnIndex("x")); info.y = c.getFloat(c.getColumnIndex("y")); info.z = c.getFloat(c.getColumnIndex("z")); infos.add(info); } c.close(); db.close(); return infos; } /** * query all persons, return cursor * @return Cursor */ public Cursor queryTheCursor() { Cursor c = db.rawQuery("SELECT * FROM info", null); return c; } }
9、DBOpenHelper
package com.njupt.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context) { super(context, "njupt.db", null, 1); } //数据库第一次创建时候调用, public void onCreate(SQLiteDatabase db) { System.out.println("---------->创建了一张表..."); db.execSQL("create table info(_id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(20),x float(10), y float(10),z float(10))"); } //数据库文件版本号发生变化时调用 public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { } }
10、Info
package com.njupt.pojo; /** * 用来记录一条异常信息 * @author 黄俊东大神 * */ public class Info { public int _id; public String name;//发生异常信息时,短信是给谁发的 public float x;//x方向上的加速度 public float y;//y轴方向上的加速度 public float z;//z轴方向上的加速度 public int get_id() { return _id; } public void set_id(int _id) { this._id = _id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getX() { return x; } public void setX(float x) { this.x = x; } public float getY() { return y; } public void setY(float y) { this.y = y; } public float getZ() { return z; } public void setZ(float z) { this.z = z; } }
11、Uitls
package com.njupt.utils; import android.content.Context; import android.widget.Toast; public class Utils { /** * 判断一个函数是否是一个数字 * @param context * @param str * @return */ public static boolean checkStringIsNumber(Context context,String str){ int size = str.length(); if (size <= 0) { Toast.makeText(context, "所输入的内容不能为空", 0).show(); return false; } for (int i = 0; i < size; ++i) { if (Character.isDigit(str.charAt(i)) == false) { Toast.makeText(context, "所输入的内容必须是一个数字..", 1).show(); return false; } } return true; } }
12、DBTest
package com.njupt.test; import java.util.List; import com.njupt.db.DBDao; import com.njupt.db.DBOpenHelper; import com.njupt.pojo.Info; import android.database.sqlite.SQLiteDatabase; import android.test.AndroidTestCase; public class DBTest extends AndroidTestCase{ public void testCreateDatabase() { DBOpenHelper helper = new DBOpenHelper(getContext()); helper.getWritableDatabase(); /* * 获取可写的数据连接 * 数据库文件不存在时, 会创建数据库文件, 并且执行onCreate()方法 * 数据库文件存在, 并且版本没有改变时, 不执行任何方法 * 数据库文件存在, 版本提升, 执行onUpgrade()方法 */ } public void testQuery(){ DBDao dao = new DBDao(getContext()); List<Info> infos = dao.query(); for(Info info : infos){ System.out.println("_id:" +info.get_id() + ",name: " + info.getName() + ",x: " + info.getX() + ",y: " + info.getY() + ",z: " + info.getZ()); } } }
本项目源码下载链接:http://download.csdn.net/detail/caihongshijie6/7559633
南京邮电大学课程设计——加速度检测应用,布布扣,bubuko.com
时间: 2024-10-07 05:16:42