Android アプリケーションを作成しました。ここで、特定のアクションが発生したときにデバイスを振動させたいと考えています。これどうやってするの?
13 に答える
試す:
import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
//deprecated in API 26
v.vibrate(500);
}
ノート:
AndroidManifest.xml ファイルに許可を含めることを忘れないでください。
<uses-permission android:name="android.permission.VIBRATE"/>
振動許可を与える
バイブレーション コードの実装を開始する前に、アプリケーションにバイブレーションの許可を与える必要があります。
<uses-permission android:name="android.permission.VIBRATE"/>
この行を必ず AndroidManifest.xml ファイルに含めてください。
振動ライブラリをインポートする
ほとんどの IDE でこれが行われますが、そうでない場合のインポート ステートメントは次のとおりです。
import android.os.Vibrator;
振動を発生させたいアクティビティでこれを確認してください。
一定時間振動させる方法
ほとんどの場合、あらかじめ決められた短い時間、デバイスを振動させたいと思うでしょう。vibrate(long milliseconds)
メソッドを使用してこれを実現できます。簡単な例を次に示します。
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 400 milliseconds
v.vibrate(400);
それだけです、簡単です!
無期限に振動させる方法
デバイスを無期限に振動させたい場合があります。vibrate(long[] pattern, int repeat)
これには、次の方法を使用します。
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Start without a delay
// Vibrate for 100 milliseconds
// Sleep for 1000 milliseconds
long[] pattern = {0, 100, 1000};
// The '0' here means to repeat indefinitely
// '0' is actually the index at which the pattern keeps repeating from (the start)
// To repeat the pattern from any other point, you could increase the index, e.g. '1'
v.vibrate(pattern, 0);
バイブレーションを停止する準備ができたら、次のcancel()
メソッドを呼び出します。
v.cancel();
振動パターンの使い方
よりオーダーメイドの振動が必要な場合は、独自の振動パターンを作成してみることができます。
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Start without a delay
// Each element then alternates between vibrate, sleep, vibrate, sleep...
long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100};
// The '-1' here means to vibrate once, as '-1' is out of bounds in the pattern array
v.vibrate(pattern, -1);
より複雑な振動
より包括的な範囲の触覚フィードバックを提供する複数の SDK があります。特殊効果に使用するのは、Immersion の Haptic Development Platform for Androidです。
トラブルシューティング
デバイスが振動しない場合は、まず振動できることを確認してください。
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Output yes if can vibrate, no otherwise
if (v.hasVibrator()) {
Log.v("Can Vibrate", "YES");
} else {
Log.v("Can Vibrate", "NO");
}
次に、アプリケーションにバイブレーションの許可を与えていることを確認してください! 最初のポイントに戻ります。
上記の答えは完璧です。ただし、ボタンのクリックでアプリを正確に 2 回振動させたかったのですが、この小さな情報がここにないため、私のような将来の読者のために投稿します。:)
上記のように従う必要があり、唯一の変更は以下のように振動パターンになります。
long[] pattern = {0, 100, 1000, 300};
v.vibrate(pattern, -1); //-1 is important
これは正確に2 回振動します。私たちがすでに知っているように
- 0 は遅延用です
- 100 は、初めて 100 ミリ秒振動すると言います
- 次は1000msの遅延
- 300ms の間再び振動する投稿
遅延と振動を交互に言及し続けることができます (たとえば、3 つの振動の場合は 0、100、1000、300、1000、300 など)。:)
また、 repeatパラメータが -1 に設定されていることにも注意してください。これは、振動がパターンで述べたとおりに正確に発生することを意味します。:)
無断で振動させる
デバイスを 1 回だけ振動させて、ユーザー アクションに関するフィードバックを提供する場合。performHapticFeedback()
の機能が使えますView
。VIBRATE
これは、マニフェストで宣言する許可を必要としません。
プロジェクトの Utils.kt などの一般的なクラスで、次の関数を最上位関数として使用します。
/**
* Vibrates the device. Used for providing feedback when the user performs an action.
*/
fun vibrate(view: View) {
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
}
そして、あなたのどこでも、Fragment
またはActivity
次のように使用します:
vibrate(requireView())
そのような単純な!
最初の実装でこれを行う方法を理解するのに苦労しました-次のものがあることを確認してください:
1) お使いのデバイスはバイブレーションをサポートしています (私の Samsung タブレットは動作しなかったので、コードを再確認しました - 元のコードは私の CM タッチパッドで完全に動作しました)
2) AndroidManifest.xml ファイルでアプリケーション レベルの上に宣言し、コードの実行許可を与えています。
3) 次の両方を他のインポートと共に MainActivity.java にインポートしました: import android.content.Context; android.os.Vibrator をインポートします。
4) バイブレーションを呼び出します (既にこのスレッドで広く議論されています) - 私は別の関数でそれを行い、他のポイントでコードでこれを呼び出しました - バイブレーションを呼び出すために何を使用したいかによっては、画像が必要になる場合があります ( Android:ボタンを長押し -> アクションを実行) またはボタンリスナー、または XML で定義されたクリック可能なオブジェクト ( Clickable image - android ):
public void vibrate(int duration)
{
Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibs.vibrate(duration);
}
<uses-permission android:name="android.permission.VIBRATE"/>
<manifest>
タグの内側とタグの外側に追加する必要があります<application>
。
次の utils メソッドを使用します。
public static final void vibratePhone(Context context, short vibrateMilliSeconds) {
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(vibrateMilliSeconds);
}
AndroidManifest ファイルに次の権限を追加します
<uses-permission android:name="android.permission.VIBRATE"/>
上記のように、さまざまな種類のバイブレーション (パターン/不定) を使用する場合は、オーバーロードされたメソッドを使用できます。