##いこと
android studioを使ってジャイロセンサの値を取得し、それぞれの軸が指定した範囲に入ったらバイブレーションが発生する
発生している問題・エラーメッセージ
android studioで作成したプログラムで、androidスマートフォンを用いてジャイロセンサの値は取得できたのですが、範囲の中にバイブレーションが発生するプログラムを書き込むとvibratorにエラーが生じてしまい(スクリーンショット)、これの解決方法がわかりませんでした。
試したこと
まず、基盤となるジャイロセンサの値を取得し、条件を指定しました。その中にバイブレーションのプログラムをif文を使ってあてはめました
###kotlin
import android.hardware.Sensor import android.hardware.SensorEvent import android.hardware.SensorEventListener import android.hardware.SensorManager import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.TextView import java.util.Locale import android.os.Vibrator; import android.content.Context; class MainActivity : AppCompatActivity(), SensorEventListener { private var sensorManager: SensorManager? = null private var textView: TextView? = null private var textInfo: TextView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Get an instance of the SensorManager sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager textInfo = findViewById(R.id.text_info) // Get an instance of the TextView textView = findViewById(R.id.text_view) } override fun onResume() { super.onResume() // Listenerの登録 val gyro = sensorManager!!.getDefaultSensor(Sensor.TYPE_GYROSCOPE) if (gyro != null) { sensorManager!!.registerListener(this, gyro, SensorManager.SENSOR_DELAY_UI) } else { val ns = "No Support" textView!!.text = ns } } // 解除するコードも入れる! override fun onPause() { super.onPause() // Listenerを解除 sensorManager!!.unregisterListener(this) } override fun onSensorChanged(event: SensorEvent) { Log.d("debug", "onSensorChanged") if (event.sensor.type == Sensor.TYPE_GYROSCOPE) { val sensorX = event.values[0] val sensorY = event.values[1] val sensorZ = event.values[2] val strTmp = String.format(Locale.US, "Gyroscope\n " + " X: %f\n Y: %f\n Z: %f", sensorX, sensorY, sensorZ) textView!!.text = strTmp showInfo(event) if(sensorX <= 1 && sensorY <=1 && sensorZ <=1) { ((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).vibrate(1000); }else{ ((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).cancel(); } } } // センサーの各種情報を表示する private fun showInfo(event: SensorEvent) { // センサー名 val info = StringBuffer("Name: ") info.append(event.sensor.name) info.append("\n") // ベンダー名 info.append("Vendor: ") info.append(event.sensor.vendor) info.append("\n") // 型番 info.append("Type: ") info.append(event.sensor.type) info.append("\n") // 最小遅れ var data = event.sensor.minDelay info.append("Mindelay: ") info.append(data.toString()) info.append(" usec\n") // 最大遅れ data = event.sensor.maxDelay info.append("Maxdelay: ") info.append(data.toString()) info.append(" usec\n") // レポートモード data = event.sensor.reportingMode var stinfo = "unknown" if (data == 0) { stinfo = "REPORTING_MODE_CONTINUOUS" } else if (data == 1) { stinfo = "REPORTING_MODE_ON_CHANGE" } else if (data == 2) { stinfo = "REPORTING_MODE_ONE_SHOT" } info.append("ReportingMode: ") info.append(stinfo) info.append("\n") // 最大レンジ info.append("MaxRange: ") var fData = event.sensor.maximumRange info.append(fData.toString()) info.append("\n") // 分解能 info.append("Resolution: ") fData = event.sensor.resolution info.append(fData.toString()) info.append(" m/s^2\n") // 消費電流 info.append("Power: ") fData = event.sensor.power info.append(fData.toString()) info.append(" mA\n") textInfo!!.text = info } override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) { } }
###発生しているエラー
vibratorにエラーが生じてしまいました。
回答にあった大文字var
補足情報(FW/ツールのバージョンなど)
android studio ver 3.2.1
ジャイロセンサ
バイブレーション開始
バイブレーション停止
のサイト様を参考にしました。
回答2件
あなたの回答
tips
プレビュー