トップページ > 記事閲覧
Android版:バイブレーション
名前:BayLeaf 日時: 2018/04/01 21:37

いつもお世話になっております。 通知機能を実装していただいた際にバイブレーション機能も付けていただきましたが、 バイブレーションのみを行う関数が必要になりました。 また、バイブレーションの強さも設定できれば幸いです。 もしくは Joypad のバイブレーション関数と兼用できるように 以下の Joypad の関数を拡張して Android でも使えるようにしていただく方法でも良いです。 (むしろこちらのほうが個人的に良いかもしれないです) 引数の InputType には Android 専用のマクロを指定できればかと。 ・StartJoypadVibration ・StopJoypadVibration ・SetUseJoypadVibrationFlag どちらでも構わないですので実装の検討をお願いします。
メンテ

Page: 1 |

Re: Android版:バイブレーション ( No.1 )
名前:管理人 日時:2018/04/01 22:05

Android のバイブレーション機能は AndroidNotification のバイブレーションの引数で指定するように 振動のパターンを指定して、それを何回リピート再生するか、といった指定しかできないようです なので、StartJoypadVibration や StopJoypadVibration のような 『ストップしない限りはずっと振動し続ける』というようなことはできません ( 振動パターンの一つ目の振動の時間を 1000秒などにして、明示的にストップするまで振動が止まない、  などの裏技を使えば擬似的には可能そうですが、恐らく推奨されないバイブレーション機能の使い方だと思います・・・ ) なので実装するとしたら AndroidNotification のバイブレーションに関する引数だけを抜き取ったような関数になると 思いますが、それでもよろしいでしょうか?
メンテ
Re: Android版:バイブレーション ( No.2 )
名前:BayLeaf 日時:2018/04/02 01:17

> Android のバイブレーション機能は AndroidNotification のバイブレーションの引数で指定するように > 振動のパターンを指定して、それを何回リピート再生するか、といった指定しかできないようです StartJoypadVibration にある Power の引数も再現が難しいのでしょうか? できれば振動の強さも(端末の設定とは別に)変更できるようにしたいです。(これは別関数で変更しても良いです) 上記ができれば『ストップしない限りはずっと振動し続ける』についてはできなくて問題ないですので そのまま実装していただいて構いません。
メンテ
Re: Android版:バイブレーション ( No.3 )
名前:管理人 日時:2018/04/03 00:52

> StartJoypadVibration にある Power の引数も再現が難しいのでしょうか? > できれば振動の強さも(端末の設定とは別に)変更できるようにしたいです。(これは別関数で変更しても良いです) 振動の強さは Android 8.0 から指定が可能なようですが、Android 8.0 は去年出たばかりのバージョンなので、 振動の強さに対応している端末はまだまだ少ないのではないかと思います( 徐々に増えていくと思いますが・・・ ) 当然 Android 7.0 以下のバージョンではそもそも振動の強さを指定する API が無いので、デフォルトの強さで 振動することになります 一応振動の強さも指定できるようにしようと思いますが、私も Android 8.0 にネイティブに対応した端末は 所持していない( 手元にあるのは発売時 7.0 で、後から 8.0 にバージョンアップした端末なので、振動の強さの機能に 対応していない可能性が高いです )ので、正しく実装できているか確認できません・・・・ (・・; > 上記ができれば『ストップしない限りはずっと振動し続ける』についてはできなくて問題ないですので > そのまま実装していただいて構いません。 ・Android 7.0 以下の端末では振動の強さは一定 ・Android 8.0 以上の端末でも必ずしも振動の強さを指定できるとは限らない という条件ですが大丈夫でしょうか?
メンテ
Re: Android版:バイブレーション ( No.4 )
名前:BayLeaf 日時:2018/04/03 01:07

> 振動の強さは Android 8.0 から指定が可能なようですが、Android 8.0 は去年出たばかりのバージョンなので、 > 振動の強さに対応している端末はまだまだ少ないのではないかと思います( 徐々に増えていくと思いますが・・・ ) そんな最近だったのですね。知らずに言ってしまいすみません。 でも、今後のためにも振動の強さも実装しておいてくださると助かります。
メンテ
Re: Android版:バイブレーション ( No.5 )
名前:管理人 日時:2018/04/04 00:55

わかりました では機能を実装しますので数日お待ちください m(_ _)m ( 遅くなったとしても次の週末には実装できると思います )
メンテ
Re: Android版:バイブレーション ( No.6 )
名前:BayLeaf 日時:2018/04/04 23:22

ありがとうございます。 あと、(プログラム上で) Android のバージョンを取得する方法について教えてください。 せっかくですのでバージョン別に分岐処理をしておきたいと考えています。
メンテ
Re: Android版:バイブレーション ( No.7 )
名前:管理人 日時:2018/04/05 01:06

> あと、(プログラム上で) Android のバージョンを取得する方法について教えてください。 ご指摘いただいて気づきました、現時点では Android のバージョンを取得する機能がありません バイブレーション機能の追加と一緒に Android のバージョンを取得するための関数も追加したいと思いますので 今しばらくお待ちください m(_ _)m
メンテ
Re: Android版:バイブレーション ( No.8 )
名前:ギウ 日時:2018/04/05 07:35

(横から失礼します) バイブレーション機能良いですね! 私も使わせて頂きます。 そしていつもながらの神対応に感動中^^
メンテ
Re: Android版:バイブレーション ( No.9 )
名前:管理人 日時:2018/04/08 00:24

お待たせしました、バイブレーション用の関数と Androidのバージョンを取得するための関数を追加しました よろしければダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 以下の関数を追加しました ( Android の振動機能の API の引数の使い勝手がそれぞれ異なるので、とりあえず全部そのまま 3つの関数にしました ) // Android の APIレベルを取得する int GetAndroidAPILevel( void ) ; // 振動機能関係( 使用するには AndroidManifest.xml に <uses-permission android:name="android.permission.VIBRATE" /> を書き加える必要があります ) // 振動機能を使用できるかどうかを取得する // ( 戻り値 TRUE : 振動機能を使用できる FALSE : 振動機能を使用できない ) int Vibrator_hasVibrator( void ) ; // 振動機能に振幅制御( 振動の強さ制御 )機能があるかどうかを取得する // ( 戻り値 TRUE : 振幅制御ができる FALSE : 振幅制御はできない ) int Vibrator_hasAmplitudeControl( void ) ; // 振動を開始する // Milliseconds : 振動させる時間( 単位:ミリ秒 ) // Amplitude : 振動の強さ( 0( 振動なし ) 〜 255( 最大振幅 ) )、振動の強さの制御に対応していない場合は無視されます int Vibrator_vibrate( int Milliseconds, int Amplitude ) ; // 振動パターン付きの振動を開始する // Timings : 振動パターンを定義する時間 //     ( 単位:ミリ秒 )の配列( Timings[0]:振動を開始するまでの待ち時間、Timings[1]:振動し続ける時間、 //                 Timings[2]:振動を停止している時間、Timings[3]:振動し続ける時間、 //                 Timings[4]:振動を停止している時間  以下繰り返し ) // TimingsLength : Timings の配列の長さ // Repeat : 振動パターンを繰り返す場合の配列の要素番号 //     ( 例 0=最初から繰り返し 1:配列要素の1から繰り返し )、-1 で繰り返し無し int Vibrator_vibrate_with_OnOffTimings( int *Timings, int TimingsLength, int Repeat ) ; // 振幅制御付き( 振動の強さ指定付き )振動を開始する( Vibrator_hasAmplitudeControl の戻り値が TRUE の場合のみ使用可能 ) // Timings : 振動の強さを変更するタイミング( 単位:ミリ秒 )の配列 // Amplitudes : 振動の強さ( 0( 振動なし ) 〜 255( 最大振幅 ) )の配列 // ArrayLength : Timings と Amplitudes の配列の長さ( 配列の長さはどちらも同じである必要があります ) // Repeat : Timings と Amplitudes で示される振動パターンを繰り返す場合の配列の要素番号 //       ( 例 0=最初から繰り返し 1:配列要素の1から繰り返し )、-1 で繰り返し無し int Vibrator_vibrate_with_Amplitudes( int *Timings, int *Amplitudes, int ArrayLength, int Repeat ) ; // 振動を中断する int Vibrator_cancel( void ) ; 注釈にもありますが、振動機能の使用には AndroidManifest.xml に <uses-permission android:name="android.permission.VIBRATE" /> を書き加える必要がありますのでご注意ください 因みに、発売時 Android 7.0 で後から Android 8.0 にバージョンアップした手元の SO-04J では 予想していた通り Vibrator_hasAmplitudeControl の戻り値は FALSE でした orz あと、Android のバージョンの取得ですが、バージョンの数字ではなく APIレベルを取得する関数となっています、 APIレベルと Android のバージョンの関係は以下の通りです Android 1.0 API Level 1 Android 1.1 API Level 2 Android 1.5 API Level 3 Android 1.6 API Level 4 Android 2.0 API Level 5 Android 2.0.1 API Level 6 Android 2.1.x API Level 7 Android 2.2.x API Level 8 Android 2.3 API Level 9 Android 2.3.3 API Level 10 Android 3.0.x API Level 11 Android 3.1.x API Level 12 Android 3.2 API Level 13 Android 4.0 API Level 14 Android 4.0.3 API Level 15 Android 4.1 API Level 16 Android 4.2 API Level 17 Android 4.3 API Level 18 Android 4.4 API Level 19 Android 5.0 API Level 21 Android 5.1 API Level 22 Android 6.0 API Level 23 Android 7.0 API Level 24 Android 8.0 API Level 26 Android 8.1 API Level 27 > ギウさん お褒め頂ありがとうございます 神対応というには少し返信頻度や実装が遅いかもしれませんが・・・ (^ ^; もし不具合がありましたらご連絡ください m(_ _)m
メンテ
Re: Android版:バイブレーション ( No.10 )
名前:BayLeaf 日時:2018/04/11 01:42

機能を追加していただきありがとうございます。 忙しくなってしまい試せてなかったのですが、少し時間ができたので先程実行してみました。 特に不具合はなかったので報告します。 > 因みに、発売時 Android 7.0 で後から Android 8.0 にバージョンアップした手元の SO-04J では > 予想していた通り Vibrator_hasAmplitudeControl の戻り値は FALSE でした orz 私の端末も残念ながら FALSE でした。 戻り値が TRUE になる端末が欲しいです。 それと2つほど質問をさせてください。 1. 流石に実機以外で振動の強さを確認する方法はありませんよね? 8.0 以降の端末を購入する予定がまだないので今はエミュレーター内の数字を見るしかないですよね。 Windows版と同じ仕様でしたらそちらで実行の確認を行えるのですが、現状は引数などが違うので難しいです。 そこで振動の強さを確認する代案を思いついたのですが、 2. Windows版に Android版仕様のバイブレーション関数を作ることは可能でしょうか?
メンテ
Re: Android版:バイブレーション ( No.11 )
名前:管理人 日時:2018/04/11 01:56

> 1. 流石に実機以外で振動の強さを確認する方法はありませんよね? 『今どれくらいの強さで振動しているか』が表示されるエミュレーターでもあれば数値で確認することはできると思います ( そのようなエミュレータがかるのかはわかりませんが・・・ ) また、仮に振動の強さの指定に対応している実機の端末であっても 0 = その端末での最小振動 255 = その端末での最大振動 なので、端末毎に実際の振動の度合いは異なると思います > 2. Windows版に Android版仕様のバイブレーション関数を作ることは可能でしょうか? すみません、できません 今回追加した関数は単純に Android の振動 API を呼ぶだけの関数で、指定したパターンに沿って振動させているのも 全て Android の OS が行うことなので、同じものを Windows版に追加することはできません
メンテ
Re: Android版:バイブレーション ( No.12 )
名前:ギウ 日時:2018/04/11 07:45

ご対応ありがとうございます! 因みに、 Vibrator_hasVibratorで確認せずに、 Vibrator_vibrateだけ実行する感じでも問題ないでしょうか。(揺れないスマホでもエラーにならないかどうか)
メンテ
Re: Android版:バイブレーション ( No.13 )
名前:BayLeaf 日時:2018/04/11 21:53

> 端末毎に実際の振動の度合いは異なると思います そうですね。 まあ自分が実装する予定のものは度合いが異なったとしても特に問題はないと思われます。 > 今回追加した関数は単純に Android の振動 API を呼ぶだけの関数で、指定したパターンに沿って振動させているのも > 全て Android の OS が行うことなので、同じものを Windows版に追加することはできません 分かりました。 自前で疑似関数を制作して解決できるようにしたいと思います。 私は解決しましたが、ギウさんの質問が残っているので 解決マークは付けておかないことにします。
メンテ
Re: Android版:バイブレーション ( No.14 )
名前:管理人 日時:2018/04/12 02:57

> ギウさん > 因みに、 > Vibrator_hasVibratorで確認せずに、 >  > Vibrator_vibrateだけ実行する感じでも問題ないでしょうか。(揺れないスマホでもエラーにならないかどうか) はい、問題ありません
メンテ
Re: Android版:バイブレーション ( No.15 )
名前:ギウ(解決) 日時:2018/04/13 23:04

了解しました。 ありがとうございます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存