{"id":1008,"date":"2020-11-30T15:23:57","date_gmt":"2020-11-30T07:23:57","guid":{"rendered":"https:\/\/badgameshow.com\/fly\/?p=1008"},"modified":"2020-11-30T15:27:41","modified_gmt":"2020-11-30T07:27:41","slug":"android-%e6%8c%87%e5%8c%97%e9%87%9d","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/fly\/android-%e6%8c%87%e5%8c%97%e9%87%9d\/","title":{"rendered":"Android \u6307\u5317\u91dd"},"content":{"rendered":"<h3>1.\u53d6\u5f97SensorManager<\/h3>\n<pre><code class=\"language-kotlin line-numbers\">val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager\n<\/code><\/pre>\n<h3>2.\u76e3\u807d\u611f\u6e2c\u5668 \u5be6\u73feSensorEventListener<\/h3>\n<pre><code class=\"language-Kotlin line-numbers\">\/\/\u52a0\u901f\u5ea6Sensor (\u9078\u64c7\u4f4e\u5ef6\u9072)\nsensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME)\n\/\/\u78c1\u5834Sensor (\u9078\u64c7\u4f4e\u5ef6\u9072)\nsensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_GAME)\n\noverride fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {\n\n}\n\noverride fun onSensorChanged(event: SensorEvent) {\n    \/\/\u6578\u503c\u5728\u9019\u908a\u53d6\u5f97\n}\n<\/code><\/pre>\n<h3>3.\u6307\u5317\u91dd\u89d2\u5ea6\u8a08\u7b97<\/h3>\n<pre><code class=\"language-Kotlin line-numbers\">private var mGravity = FloatArray(3)\nprivate var mGeomagnetic = FloatArray(3)\nprivate var azimuth = 0f\nprivate var currentAzimuth = 0f\n\noverride fun onCreate(savedInstanceState: Bundle?) {\n     super.onCreate(savedInstanceState)\n     setContentView(R.layout.activity_main)\n}\n\noverride fun onSensorChanged(event: SensorEvent) {\n    val alpha = 0.97f\n    synchronized(this) {\n       if (event.sensor.type == Sensor.TYPE_ACCELEROMETER) {\n            mGravity[0] = alpha * mGravity[0] + (1 - alpha) * event.values[0]\n            mGravity[1] = alpha * mGravity[1] + (1 - alpha) * event.values[1]\n            mGravity[2] = alpha * mGravity[2] + (1 - alpha) * event.values[2]\n       }\n       if (event.sensor.type == Sensor.TYPE_MAGNETIC_FIELD) {\n            mGeomagnetic[0] = alpha * mGeomagnetic[0] + (1 - alpha) * event.values[0]\n            mGeomagnetic[1] = alpha * mGeomagnetic[1] + (1 - alpha) * event.values[1]\n            mGeomagnetic[2] = alpha * mGeomagnetic[2] + (1 - alpha) * event.values[2]\n        }\n        val R = FloatArray(9)\n        val L = FloatArray(9)\n        val success = SensorManager.getRotationMatrix(R, L, mGravity, mGeomagnetic)\n        if (success) {\n            val orientation = FloatArray(3)\n            SensorManager.getOrientation(R, orientation)\n            azimuth = Math.toDegrees(orientation[0].toDouble()).toFloat()\n            azimuth = (azimuth + 360) % 360\n            val anim: Animation = RotateAnimation(\n                    -currentAzimuth,\n                    -azimuth,\n                    Animation.RELATIVE_TO_SELF,\n                    0.5f,\n                    Animation.RELATIVE_TO_SELF,\n                    0.5f\n             )\n             currentAzimuth = azimuth\n             anim.duration = 500\n             anim.repeatCount = 0\n             anim.fillAfter = true\n             compass.startAnimation(anim)\n        }\n     }\n}\n<\/code><\/pre>\n<h3>4.\u6548\u679c\u5c55\u793a<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/11\/compass.gif\" alt=\"\" \/><\/p>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>1.\u53d6\u5f97SensorManager val sensorManager = getSystemService( &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[5],"tags":[13,156,15],"class_list":["post-1008","post","type-post","status-publish","format-standard","hentry","category-android","tag-android","tag-compass","tag-kotlin"],"_links":{"self":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/comments?post=1008"}],"version-history":[{"count":1,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1008\/revisions"}],"predecessor-version":[{"id":1010,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1008\/revisions\/1010"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/media?parent=1008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/categories?post=1008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/tags?post=1008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}