Changpeng Duan 5 年 前
コミット
1e0b9721a1

+ 1 - 0
app/build.gradle

@@ -55,6 +55,7 @@ dependencies {
     implementation 'androidx.gridlayout:gridlayout:1.0.0'
     implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation(name: 'chileaf_wear_sdk_2.0.0', ext: 'aar')
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
     testImplementation 'junit:junit:4.13'
     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

+ 0 - 102
app/src/main/java/com/example/watch/ui/activity/BaseActivity

@@ -1,102 +0,0 @@
-package com.example.watch.ui.activity
-
-import android.bluetooth.BluetoothAdapter
-import android.bluetooth.BluetoothManager
-import android.content.Intent
-import android.content.pm.PackageManager
-import android.os.Bundle
-import android.os.Handler
-import android.os.Looper
-import android.view.View
-import android.widget.ImageView
-import android.widget.TextView
-import android.widget.Toast
-import androidx.annotation.LayoutRes
-import androidx.appcompat.app.AppCompatActivity
-import com.android.chileaf.WearManager
-
-abstract class BaseActivity : AppCompatActivity() {
-    abstract val Timber: Any
-    protected var mManager: WearManager? = null
-    protected var mLoading: LoadingDialog? = null
-    protected var mHandler = Handler(Looper.getMainLooper())
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        setContentView(layoutId())
-        initialize()
-        initView()
-        initData(savedInstanceState)
-    }
-
-    @LayoutRes
-    protected abstract fun layoutId(): Int
-    protected abstract fun initView()
-    protected abstract fun initData(savedInstanceState: Bundle?)
-    private fun initialize() {
-        val ivBack = findViewById<ImageView>(R.id.iv_toolbar_back)
-        ivBack?.setOnClickListener { v: View? -> onBackPressed() }
-        mManager = WearManager.getInstance(this)
-        mManager.setDebug(BuildConfig.DEBUG)
-    }
-
-    protected fun setTitle(title: String?) {
-        val tvTitle = findViewById<TextView>(R.id.tv_toolbar_title)
-        if (tvTitle != null) {
-            tvTitle.text = title
-        }
-    }
-
-    protected fun launchDetail(type: Int, stamp: Long) {
-        val history = Intent(this, HistoryDetailActivity::class.java)
-        history.putExtra(HistoryDetailActivity.EXTRA_TYPE, type)
-        history.putExtra(HistoryDetailActivity.EXTRA_STAMP, stamp)
-        startActivity(history)
-    }
-
-    protected fun showLoading(message: String? = getString(R.string.loading)) {
-        mLoading = LoadingDialog.Builder(this)
-            .setMessage(message)
-            .build()
-        mLoading.show()
-    }
-
-    protected fun showLoadingAutoDismiss(delay: Long) {
-        showLoading()
-        mHandler.postDelayed({ hideLoading() }, delay)
-    }
-
-    protected fun hideLoading() {
-        if (mLoading != null && mLoading.isShowing()) {
-            mLoading.dismiss()
-        }
-    }
-
-    protected fun showToast(message: String?) {
-        runOnUiThread {
-            Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
-        }
-    }
-
-    protected fun ensureBLESupported() {
-        if (!packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
-            Toast.makeText(this, R.string.no_ble, Toast.LENGTH_LONG).show()
-            finish()
-        }
-    }
-
-    protected val isBLEEnabled: Boolean
-        protected get() {
-            val bluetoothManager = getSystemService(BLUETOOTH_SERVICE) as BluetoothManager
-            val adapter = bluetoothManager.adapter
-            return adapter != null && adapter.isEnabled
-        }
-
-    protected fun showBLEDialog() {
-        val enableIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
-        startActivity(enableIntent)
-    }
-}
-
-class LoadingDialog {
-
-}

+ 0 - 102
app/src/main/java/com/example/watch/ui/activity/BaseActivity.kt

@@ -1,102 +0,0 @@
-package com.example.watch.ui.activity
-
-//import android.bluetooth.BluetoothAdapter
-//import android.bluetooth.BluetoothManager
-//import android.content.Intent
-//import android.content.pm.PackageManager
-//import android.os.Bundle
-//import android.os.Handler
-//import android.os.Looper
-//import android.view.View
-//import android.widget.ImageView
-//import android.widget.TextView
-//import android.widget.Toast
-//import androidx.annotation.LayoutRes
-//import androidx.appcompat.app.AppCompatActivity
-//import com.android.chileaf.WearManager
-//
-//abstract class BaseActivity : AppCompatActivity() {
-//    abstract val Timber: Any
-//    protected var mManager: WearManager? = null
-//    protected var mLoading: LoadingDialog? = null
-//    protected var mHandler = Handler(Looper.getMainLooper())
-//    override fun onCreate(savedInstanceState: Bundle?) {
-//        super.onCreate(savedInstanceState)
-//        setContentView(layoutId())
-//        initialize()
-//        initView()
-//        initData(savedInstanceState)
-//    }
-//
-//    @LayoutRes
-//    protected abstract fun layoutId(): Int
-//    protected abstract fun initView()
-//    protected abstract fun initData(savedInstanceState: Bundle?)
-//    private fun initialize() {
-//        val ivBack = findViewById<ImageView>(R.id.iv_toolbar_back)
-//        ivBack?.setOnClickListener { v: View? -> onBackPressed() }
-//        mManager = WearManager.getInstance(this)
-//        mManager.setDebug(BuildConfig.DEBUG)
-//    }
-//
-//    protected fun setTitle(title: String?) {
-//        val tvTitle = findViewById<TextView>(R.id.tv_toolbar_title)
-//        if (tvTitle != null) {
-//            tvTitle.text = title
-//        }
-//    }
-//
-//    protected fun launchDetail(type: Int, stamp: Long) {
-//        val history = Intent(this, HistoryDetailActivity::class.java)
-//        history.putExtra(HistoryDetailActivity.EXTRA_TYPE, type)
-//        history.putExtra(HistoryDetailActivity.EXTRA_STAMP, stamp)
-//        startActivity(history)
-//    }
-//
-//    protected fun showLoading(message: String? = getString(R.string.loading)) {
-//        mLoading = LoadingDialog.Builder(this)
-//            .setMessage(message)
-//            .build()
-//        mLoading.show()
-//    }
-//
-//    protected fun showLoadingAutoDismiss(delay: Long) {
-//        showLoading()
-//        mHandler.postDelayed({ hideLoading() }, delay)
-//    }
-//
-//    protected fun hideLoading() {
-//        if (mLoading != null && mLoading.isShowing()) {
-//            mLoading.dismiss()
-//        }
-//    }
-//
-//    protected fun showToast(message: String?) {
-//        runOnUiThread {
-//            Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
-//        }
-//    }
-//
-//    protected fun ensureBLESupported() {
-//        if (!packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
-//            Toast.makeText(this, R.string.no_ble, Toast.LENGTH_LONG).show()
-//            finish()
-//        }
-//    }
-//
-//    protected val isBLEEnabled: Boolean
-//        protected get() {
-//            val bluetoothManager = getSystemService(BLUETOOTH_SERVICE) as BluetoothManager
-//            val adapter = bluetoothManager.adapter
-//            return adapter != null && adapter.isEnabled
-//        }
-//
-//    protected fun showBLEDialog() {
-//        val enableIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
-//        startActivity(enableIntent)
-//    }
-//}
-//
-//class LoadingDialog {
-//
-//}

+ 73 - 14
app/src/main/java/com/example/watch/ui/activity/MainActivity.kt

@@ -13,6 +13,7 @@ import android.os.Handler
 import android.os.Looper
 import android.provider.Settings
 import android.provider.Settings.SettingNotFoundException
+import android.view.KeyEvent
 import android.view.View
 import android.view.WindowManager
 import android.widget.Button
@@ -20,19 +21,23 @@ import android.widget.TextView
 import android.widget.Toast
 import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.app.AppCompatActivity
-import androidx.fragment.app.FragmentManager
 import androidx.fragment.app.FragmentPagerAdapter
 import androidx.viewpager.widget.ViewPager
 import com.android.chileaf.WearManager
+import com.android.chileaf.fitness.callback.WearManagerCallbacks
+import com.example.watch.BuildConfig
 import com.example.watch.R
 import com.google.android.material.bottomnavigation.BottomNavigationView
 import com.yanzhenjie.permission.AndPermission
 import com.yanzhenjie.permission.runtime.Permission
 import kotlinx.android.synthetic.main.activity_main.*
+import org.w3c.dom.Text
 import timber.log.Timber
 
-class MainActivity : AppCompatActivity(), ScannerFragment.OnDeviceSelectedListener {
-    private val mDeviceConnected = false
+
+class MainActivity : AppCompatActivity(), ScannerFragment.OnDeviceSelectedListener,
+    WearManagerCallbacks {
+    private var mDeviceConnected = false
     private val mTvAppVersion: TextView? = null
     private val mTvDeviceName: TextView? = null
     private val mTvVersion: TextView? = null
@@ -45,6 +50,10 @@ class MainActivity : AppCompatActivity(), ScannerFragment.OnDeviceSelectedListen
     private val viewPager: ViewPager? = null
     private val bottomNavigationView: BottomNavigationView? = null
     private val mPagerAdapter: FragmentPagerAdapter? = null
+
+    var toast: Toast? = null
+    var mExitTime: Long = 0
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
@@ -77,9 +86,9 @@ class MainActivity : AppCompatActivity(), ScannerFragment.OnDeviceSelectedListen
         chainBtn.setOnClickListener {
 
             val dialog = ScannerFragment.getInstance()
-            if(dialog == null){
+            if (dialog == null) {
                 println("1122")
-            }else{
+            } else {
                 dialog.show(supportFragmentManager, "scan_fragment")
             }
 
@@ -114,7 +123,9 @@ class MainActivity : AppCompatActivity(), ScannerFragment.OnDeviceSelectedListen
 
     private fun initView() {
 
-
+        mManager = WearManager.getInstance(this)
+        mManager!!.setDebug(BuildConfig.DEBUG)
+        mManager!!.setManagerCallbacks(this)
     }
 
     private fun login() {
@@ -141,9 +152,9 @@ class MainActivity : AppCompatActivity(), ScannerFragment.OnDeviceSelectedListen
         }
     }
 
-    private var mManager: WearManager? = null
-    private var mLoading: LoadingDialog? = null
-    private var mHandler = Handler(Looper.getMainLooper())
+    protected var mManager: WearManager? = null
+    protected var mLoading: LoadingDialog? = null
+    protected var mHandler = Handler(Looper.getMainLooper())
 
     private fun showLoading() {
         showLoading(getString(R.string.loading))
@@ -276,25 +287,73 @@ class MainActivity : AppCompatActivity(), ScannerFragment.OnDeviceSelectedListen
 
     override fun onDeviceSelected(device: BluetoothDevice?, name: String?) {
         mManager!!.connect(device, false)
-//        mTvDeviceName?.setText(getString(R.string.device_name, name))
+//        mTvDeviceName!!.text = getString(R.string.device_name, name)
+    }
+
+    override fun onDeviceConnected(device: BluetoothDevice) {
+        mDeviceConnected = true
+//        runOnUiThread { mBtnConnect!!.setText(R.string.action_disconnect) }
+    }
+
+    override fun onDeviceDisconnected(device: BluetoothDevice) {
+        runOnUiThread { defaultUI() }
+        mDeviceConnected = false
+        mManager!!.close()
     }
 
-    fun onError(device: BluetoothDevice, message: String, errorCode: Int) {
+
+    override fun onError(device: BluetoothDevice, message: String, errorCode: Int) {
         Timber.e("onError: ($errorCode)")
         showToast("$message ($errorCode)")
     }
 
-    fun onDeviceNotSupported(device: BluetoothDevice) {
+    override fun onDeviceNotSupported(device: BluetoothDevice) {
         showToast(getString(R.string.not_supported))
     }
 
-    fun onSoftwareVersion(device: BluetoothDevice, software: String) {
+    override fun onSoftwareVersion(device: BluetoothDevice, software: String) {
         runOnUiThread { mTvVersion?.setText("Version:$software") }
     }
 
-    fun onRssiRead(device: BluetoothDevice, rssi: Int) {
+    override fun onRssiRead(device: BluetoothDevice, rssi: Int) {
         runOnUiThread { mTvRssi?.setText("Rssi:" + rssi + "dBm") }
     }
+
+    //    连续两次回退
+    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            if (System.currentTimeMillis().minus(mExitTime) <= 3000) {
+                finish()
+            } else {
+                mExitTime = System.currentTimeMillis()
+                showToast("再按一次退出程序")
+            }
+            return true
+        }
+        return super.onKeyDown(keyCode, event)
+    }
+
+//    获取心率数据
+    override fun onHeartRateMeasurementReceived(
+        device: BluetoothDevice,
+        heartRate: Int,
+        contactDetected: Boolean?,
+        energyExpanded: Int?,
+        rrIntervals: MutableList<Int>?
+    ) {
+        super.onHeartRateMeasurementReceived(
+            device,
+            heartRate,
+            contactDetected,
+            energyExpanded,
+            rrIntervals
+        )
+
+        //心跳
+        findViewById<TextView>(R.id.heartReal).text = heartRate.toString()
+//        运动强度
+        findViewById<TextView>(R.id.activLevel).text = "10"
+    }
 }
 
 

+ 1 - 1
app/src/main/res/layout/activity_main.xml

@@ -55,7 +55,7 @@
                             android:layout_height="105dp">
 
                             <TextView
-                                android:id="@+id/textView5"
+                                android:id="@+id/activLevel"
                                 android:layout_width="match_parent"
                                 android:layout_height="82dp"
                                 android:layout_weight="1"

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -37,5 +37,7 @@
     <string name="no">无</string>
     <string name="tv_user_agreement">验证码已发送到您的手机</string>
     <string name="login_btn">登录</string>
+    <!-- TODO: Remove or change this placeholder text -->
+    <string name="hello_blank_fragment">Hello blank fragment</string>
 
 </resources>