質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

2回答

2160閲覧

android studio ジャイロセンサとバイブレーションの条件指定のやり方について

hinoarashi

総合スコア5

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/01/07 18:57

編集2020/01/08 16:18

##イメージ説明いこと
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
ジャイロセンサ
バイブレーション開始
バイブレーション停止
のサイト様を参考にしました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/01/07 19:28

使われているのは kotlin のようですので java のタグは外して頂けますか. また, コードのフォーマットに失敗されています. ```は行の先頭とし, ```の右の文字列はファイル名ではなく言語名(kotlin)としてください. コードの終わりにも ``` のみの行をいれてください. ご質問は編集できますので, 入力枠の下のプレビューを確認しながら編集して戴ければ, コードが枠に入るのを確かめられると思います. 「android studioのジャイロセンサとバイブレーション」「android studioを使ってジャイロセンサの値を取得」「android studioでのジャイロセンサの値は」とおっしゃっていますが, 普通『android studio には』ジャイロセンサー等はありません. android『スマートフォン』のことであればそのように記述してください.
hinoarashi

2020/01/07 20:56 編集

ご指摘ありがとうございます! 間違った使い方をしていて申し訳ありませんでした。わかりやすいよう、細かくアドバイスしてくださり助かりました。ご指摘を元に修正させていただきました。
guest

回答2

0

ベストアンサー

一度変数に入れては如何でしょうか.

val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator if(sensorX <= 1 && sensorY <=1 && sensorZ <=1) { vibrator.vibrate(1000) }else{ vibrator.cancel() }

投稿2020/01/08 17:05

編集2020/01/08 17:06
jimbe

総合スコア12646

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hinoarashi

2020/01/08 19:00

ありがとうございます!解決しました!
jimbe

2020/01/08 19:20

ちなみに, 参考にされたコードは java ですので, キャストの書き方が異なっていたものと思います.
hinoarashi

2020/01/08 19:24

そういうことだったのですね!本当にありがとうございました!
guest

0

Manifestにパーミッション追加してないのでは?
リンク先にもあるのでご確認下さい

AndroidManifest.xml

1 2<uses-permission android:name="android.permission.VIBRATE" />

あと思いつくのは
思い通りに条件が揃わないなら[rad]を[°]に変換したほうがスマホ触りながら感覚的に分かりやすいと思います
もしジャイロの値が取得できていないなら加速度センサにしてみては?
同リンク先の加速度センサ使用例
https://akira-watson.com/android/accelerometer.html

投稿2020/01/08 10:08

HRSKT

総合スコア168

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hinoarashi

2020/01/08 16:09

丁寧な回答ありがとうございます。Manifestにはちゃんとパーミッションの文は追加されていました。 エラーのスクリーンショットを追加で置かせていただきました。 エラー箇所はvibratorの読み込みがうまくいってないところなのですが、どうしてここでエラーが出ているのか把握できていません。 ラジアンと度数の指摘をいただきましたが、ジャイロセンサの値は取得できています。わかりにくく、質問自体に不備があり、申し訳ございませんでした。
jimbe

2020/01/08 16:12

"vibrator" は大文字 V の "Vibrator" では?
hinoarashi

2020/01/08 16:19

回答ありがとうございます。同様に試してみましたが、大文字のVibratorに変換しても同様のエラーメッセージが出てしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問