Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 超精准的Android手機計步器開發

超精准的Android手機計步器開發

編輯:關於Android編程

親測在小米.魅族.華為上可用,該app采用後台service計歩服務,所以只要app不被手機殺死在後台也是可以正常計歩的。上圖:

1.需要在AndroidManifest.xml中添加權限

<!--計歩需要的權限-->
 <uses-permission android:name="android.permission.VIBRATE" />
 <uses-permission android:name="android.permission.WRITE_SETTINGS" />
 <uses-feature android:name="android.hardware.sensor.accelerometer" />
 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
 <uses-feature
 android:name="android.hardware.sensor.stepcounter"
 android:required="true" />
 <uses-feature
 android:name="android.hardware.sensor.stepdetector"
 android:required="true" />

2.檢測手機是否支持計歩

 /**
 * 判斷該設備是否支持計歩
 *
 * @param context
 * @return
 */
 @TargetApi(Build.VERSION_CODES.KITKAT)
 public static boolean isSupportStepCountSensor(Context context) {
 // 獲取傳感器管理器的實例
 SensorManager sensorManager = (SensorManager) context
  .getSystemService(context.SENSOR_SERVICE);
 Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
 Sensor detectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
 return countSensor != null || detectorSensor != null;
 }

3.功能使用

 private boolean isBind = false;
    private Messenger mGetReplyMessenger = new Messenger(new Handler(this));
    private Messenger messenger;
   /**
     * 開啟計步服務
     */
    private void setupService() {
        Intent intent = new Intent(this, StepService.class);
        isBind = bindService(intent, conn, Context.BIND_AUTO_CREATE);
        startService(intent);

    }
    /**
     * 從service服務中拿到步數
     *
     * @param msg
     * @return
     */
    @Override
    public boolean handleMessage(Message msg) {         switch (msg.what) {             case Constant.MSG_FROM_SERVER:                 cc.setCurrentCount(10000, msg.getData().getInt("step"));                 break;         }         return false;     }     /**      * 用於查詢應用服務(application Service)的狀態的一種interface      * 更詳細的信息可以參考Service 和 context.bindService()中的描述      * 和許多來自系統的回調方式一樣,ServiceConnection的方法都是進程的主線程中調用的      */     ServiceConnection conn = new ServiceConnection() {         /**          * 在建立起於Service的連接時會調用該方法,目前Android是通過IBind機制實現與服務的連接。          * @param name 實際所連接到的Service組件名稱          * @param service 服務的通信信道的IBind,可以通過Service訪問對應服務          */         @Override         public void onServiceConnected(ComponentName name, IBinder service) {             try {                 messenger = new Messenger(service);                 Message msg = Message.obtain(null, Constant.MSG_FROM_CLIENT);                 msg.replyTo = mGetReplyMessenger;                 messenger.send(msg);             } catch (RemoteException e) {                 e.printStackTrace();             }         }       /**          * 當與Service之間的連接丟失的時候會調用該方          * 這種情況經常發生在Service所在的進程崩潰或者被Kill的時候調用          * 此方法不會移除與Service的連接,當服務重新啟動的時候仍然會調用 onServiceConnected()          * @param name 丟失連接的組件名稱          */         @Override         public void onServiceDisconnected(ComponentName name) {         }     };

GitHub地址:https://github.com/linglongxin24/DylanStepCount

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。

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