Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發筆記之高級主題—傳感器的簡單應用

android開發筆記之高級主題—傳感器的簡單應用

編輯:關於Android編程

上篇文章我們簡單的了解了下傳感器,這次我們來簡單運用下——搖一搖聽音樂

效果:

初始界面:

這裡寫圖片描述

當搖晃到一定程度的時候就跳轉到播放音樂界面並播放音磊喎?/kf/yidong/wp/" target="_blank" class="keylink">WPC9wPg0KPHA+PGltZyBhbHQ9"這裡寫圖片描述" src="/uploadfile/Collfiles/20160607/20160607091026327.png" title="\" />

步驟:

①獲得傳感器服務

SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

②獲得加速度傳感器並注冊監聽器

sm.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
sensorManager.SENSOR_DELAY_UI)

③在onSensorChanged(SensorEvent event)方法中實現搖一搖聽音樂的邏輯(其實邏輯很簡單,只需要判斷當搖晃到一定程度的時候就播放音樂,不過應該在音樂沒播放完之前搖晃是沒效果,做到這個之需要加個標志位)

                float x = arg0.values[0];
                float y = arg0.values[1];
                float z = arg0.values[2];
                if ((Math.abs(x)+Math.abs(y)+Math.abs(z)) >= RING_VALUE && flag == false) {
                    //是否正在播放音樂的標志
                    flag = true;
                    //播放音樂界面
                    tv_start.setVisibility(View.VISIBLE);
                    //播放音樂的
                    MediaPlayer player = MediaPlayer.create(MainActivity.this, R.raw.houge);
                    //開始播放音樂
                    player.start();
                    //監聽該首歌有沒有播放完
                    player.setOnCompletionListener(new OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer arg0) {
                            arg0.release();
                            flag = false;
                            tv_start.setVisibility(View.GONE);
                        }
                    });
                }

核心代碼:

activity_main.xml



    
        
    

    

    

MainActivity.java

public class MainActivity extends Activity {

    private TextView tv_start;
    private TextView tv_temp;
    public static int RING_VALUE = 40;//三維xyz三個值總和達到這個值表示搖晃
    boolean flag = false; //表示是否在播放音樂
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_start = (TextView) findViewById(R.id.tv_start);
        tv_temp = (TextView) findViewById(R.id.tv_temp);

        //獲取系統傳感器管理器
        SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //獲取指定的一個傳感器(加速度傳感器)
        Sensor accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        //注冊傳感器的監聽器
        sm.registerListener(new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent arg0) {
                //傳感器數據變化,在該方法中我們可以獲取傳感器變化的值
                float x = arg0.values[0];
                float y = arg0.values[1];
                float z = arg0.values[2];
                if ((Math.abs(x)+Math.abs(y)+Math.abs(z)) >= RING_VALUE && flag == false) {
                    //是否正在播放音樂的標志
                    flag = true;
                    //播放音樂界面
                    tv_start.setVisibility(View.VISIBLE);
                    //播放音樂的
                    MediaPlayer player = MediaPlayer.create(MainActivity.this, R.raw.houge);
                    //開始播放音樂
                    player.start();
                    //監聽該首歌有沒有播放完
                    player.setOnCompletionListener(new OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer arg0) {
                            arg0.release();
                            flag = false;
                            tv_start.setVisibility(View.GONE);
                        }
                    });
                }
            }
            @Override
            public void onAccuracyChanged(Sensor sensor, int i) {
                //傳感器精度的變化
            }
        }, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);

        //獲取溫度傳感器
        Sensor temperature = sm.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
        sm.registerListener(new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent arg0) {
                float temp = arg0.values[0];
                temp = (float) (Math.round(temp *10.0)/10.0); 
                tv_temp.setText("溫度:"+temp+"°C");       
            }

            @Override
            public void onAccuracyChanged(Sensor arg0, int arg1) {

            }
        }, temperature, SensorManager.SENSOR_DELAY_NORMAL);
    } 
}

這裡寫圖片描述

使用起來是不是很方便呢,趕緊試試吧!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved