Android實現搖一搖功能

來源:互聯網
上載者:User

標籤:搖一搖   sensor.type_accelero   handler   vibrator   sensor_shake   

 做過一個小項目,其中實現了搖一搖功能和刮一刮功能還有播放背景音樂等

搖一搖功能主要用到加速度感應器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;}}}




Android實現搖一搖功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.