Android实现摇一摇功能

来源:互联网 发布:linux口袋书 pdf 下载 编辑:程序博客网 时间:2024/05/16 09:39

 做过一个小项目,其中实现了摇一摇功能和刮一刮功能还有播放背景音乐等

摇一摇功能主要用到加速度传感器Sensor.TYPE_ACCELEROMETER

摇一摇功能主要是监听手机加速度变化,当超过设定的某一值时,即触发事件


/** * FileName: MainActivity.java * @desc 该类是用于显示摇一摇界面 * @author HTP * @Date    20140311 * @version 1.00  */public class MainActivity extends Activity implements OnClickListener {private TabHost tabHost;private MusicNameDao dao;// private ImageButton bt_setMusic;// 声音private MediaPlayer mediaPlayer;// 显示摇一摇出现的内容private TextView tv;// 要显示在tv中的内容private String msentence;// 通过类Sentence可得到摇一摇显示的内容private Sentence sentence;// 显示标签“刮一刮”private TextView tv_rubbler;// 重力感应管理器private SensorManager sensorManager;// 震动控件private Vibrator vibrator;// 标签private static final String TAG = "MainActivity";private static final int SENSOR_SHAKE = 10;// private Intent musicIntent = new Intent("com.angel.Android.MUSIC");/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dao = new MusicNameDao(this);Uri musicUri = Uri.parse("android.resource://com.example.romance/raw/"+ dao.getName());mediaPlayer = MediaPlayer.create(this, musicUri);//Toast.makeText(MainActivity.this, musicUri.toString(), 1).show();mediaPlayer.start();// 播放音乐mediaPlayer.setLooping(true);// 设置循环dao = new MusicNameDao(this);// startService(musicIntent);tv_rubbler = (TextView) findViewById(R.id.tv_rubber);tv_rubbler.setOnClickListener(this);// bt_setMusic.setOnClickListener(this);sentence = new Sentence();// Uri musicUri = Uri.parse("/sdcard/ttpod/song/虹之间.mp3");// 获取res/raw/下的音乐路径tv = (TextView) findViewById(R.id.tv_text);// 关联要显示的TextView空间sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);}@Overrideprotected void onResume() {super.onResume();if (sensorManager != null) {// 注册监听器sensorManager.registerListener(sensorEventListener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);// 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率}}@Overrideprotected void onPause() {super.onPause();if (sensorManager != null) {// 取消监听器sensorManager.unregisterListener(sensorEventListener);}}/** * 重力感应监听 */private SensorEventListener sensorEventListener = new SensorEventListener() {@Overridepublic void onSensorChanged(SensorEvent event) {// 传感器信息改变时执行该方法float[] values = event.values;float x = values[0]; // x轴方向的重力加速度,向右为正float y = values[1]; // y轴方向的重力加速度,向前为正float z = values[2]; // z轴方向的重力加速度,向上为正Log.i(TAG, "x轴方向的重力加速度" + x + ";y轴方向的重力加速度" + y + ";z轴方向的重力加速度" + z);// 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。int medumValue = 18;if (Math.abs(x) > medumValue && Math.abs(y) > medumValue|| Math.abs(y) > medumValue && Math.abs(z) > medumValue|| Math.abs(x) > medumValue && Math.abs(z) > medumValue) {vibrator.vibrate(200);Message msg = new Message();msg.what = SENSOR_SHAKE;handler.sendMessage(msg);}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}};/** * 动作执行 */Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case SENSOR_SHAKE:msentence = sentence.getSentence();// 得到随机的句子// Toast.makeText(MainActivity.this, msentence, 1).show();tv.setText(msentence);// 将得到的句子显示在textview上// Log.i(TAG, "检测到摇晃,执行操作!");break;}}};@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();mediaPlayer.stop(); // 退出时停止音乐}/** * 键盘事件,当按下back键的时候询问是否再按一次退出程序 */// 退出时间private long exitTime = 0;@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK&& event.getAction() == KeyEvent.ACTION_DOWN) {if ((System.currentTimeMillis() - exitTime) > 2000) {Toast.makeText(getApplicationContext(), "再按一次退出程序",Toast.LENGTH_SHORT).show();exitTime = System.currentTimeMillis();} else {finish();System.exit(0);}return true;}return super.onKeyDown(keyCode, event);}/** * 按钮事件监听 */@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {// 当按下按钮,将切换到刮一刮页面case R.id.tv_rubber: {Toast.makeText(MainActivity.this, "刮一刮", 1).show();Intent rubblerIntent = new Intent(MainActivity.this,RubblerAct.class);startActivity(rubblerIntent);break;}default:break;}}}




0 0
原创粉丝点击