web-dev-qa-db-ja.com

Androidデバイスを振動させる方法は?

私はAndroidアプリケーションを書きました。今、私は特定のアクションが発生したときにデバイスを振動させたいです。これどうやってするの?

436
Billie

試してください:

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"/>
883
Paresh Mayani

グラント振動許可

振動コードの実装を始める前に、アプリケーションに振動の許可を与える必要があります。

<uses-permission Android:name="Android.permission.VIBRATE"/>

この行を必ずAndroidManifest.xmlファイルに含めてください。

振動ライブラリをインポートする

ほとんどのIDEはあなたのためにこれをするでしょう、しかしあなたのものがそうしないならば、これはimportステートメントです:

 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のAndroid用Haptic Development Platform です。

トラブルシューティング

デバイスが振動しない場合は、まず振動できることを確認してください。

// 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");
}

次に、アプリケーションにバイブレーションの許可を与えたことを確認してください。最初の点に戻って参照してください。

612

Update 2017のvibrate(interval)メソッドはAndroid-O(API 8.0)では推奨されません

すべてのAndroidバージョンをサポートするには、この方法を使用してください。

// Vibrate for 150 milliseconds
private void shakeItBaby() {
    if (Build.VERSION.SDK_INT >= 26) {
        ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE));
    } else {
        ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150);
    }
}

コトリン:

// Vibrate for 150 milliseconds
private fun shakeItBaby(context: Context) {
    if (Build.VERSION.SDK_INT >= 26) {
        (context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE))
    } else {
        (context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(150)
    }
}
51
Hitesh Sahu

私は最初の実装でこれを行う方法を理解するのに苦労しました-以下を持っていることを確認してください:

1)デバイスが振動をサポートしている(Samsungタブレットが機能しなかったため、コードを再確認し続けました-元のコードはCMタッチパッドで完全に機能しました)

2)AndroidManifest.xmlファイルでアプリケーションレベルを超えて宣言して、コードに実行許可を与えました。

3)次の両方を、他のインポートとともにMainActivity.Javaにインポートしました。import Android.content.Context; import Android.os.Vibrator;

4)あなたのバイブレーションを呼び出します(すでにこのスレッドで詳しく説明しています)-別の関数でそれを行い、他のポイントでコードでこれを呼び出します-バイブレーションを呼び出すために使用するものに応じて、画像が必要になる場合があります(- Android:ボタンを長押し->アクションを実行 )またはボタンリスナー、またはXMLで定義されているクリック可能なオブジェクト( クリック可能な画像-Android ):

 public void vibrate(int duration)
 {
    Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vibs.vibrate(duration);    
 }
14
mklopfer

上記の答えは完璧です。しかし、私はボタンクリックで私のアプリを正確に2回振動させたかった、そしてこの小さな情報はここにはないので、私のような将来の読者のために投稿する。 :)

私達は上記のように従わなければなりません、そして唯一の変化は下記のように振動パターンになります、

long[] pattern = {0, 100, 1000, 300};
v.vibrate(pattern, -1); //-1 is important

これは正確に2回振動します。すでに0が遅延であることを知っているので、100は100MSで初めて振動し、次に1000MSの遅延があり、300MSで再び振動すると言います。

遅延と振動を交互に(たとえば3回の振動で0、100、1000、300、1000、300など)続けて書くことができますが、@ Daveの言葉は責任を持ってそれを使っていることを覚えておいてください。 :)

また、繰り返しパラメータが-1に設定されていることにも注意してください。これは、振動がパターンに記載されているとおりに発生することを意味します。 :)

13
Atul O Holic
<uses-permission Android:name="Android.permission.VIBRATE"/>

<manifest>タグの内側と<application>タグの外側に追加する必要があります。

5
Sivagami Nambi

上記の答えは非常に正しいですが、私はそれをするための簡単なステップを与えています:

 private static final long[] THREE_CYCLES = new long[] { 100, 1000, 1000,  1000, 1000, 1000 };

  public void longVibrate(View v) 
  {
     vibrateMulti(THREE_CYCLES);
  }

  private void vibrateMulti(long[] cycles) {
      NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
      Notification notification = new Notification();

      notification.vibrate = cycles; 
      notificationManager.notify(0, notification);
  }

そしてあなたのxmlファイルで:

<button Android:layout_height="wrap_content" 
        Android:layout_width ="wrap_content" 
        Android:onclick      ="longVibrate" 
        Android:text         ="VibrateThrice">
</button>

それが 最も簡単な の方法です。

4
dondondon

私は次の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"/>

上記のように異なる種類の振動(パターン/不定)を使用したい場合は、オーバーロードメソッドを使用できます。

3
Mahendra Liya

これを使って:

import Android.os.Vibrator;
     ...
     Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
     // Vibrate for 1000 milliseconds
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            v.vibrate(VibrationEffect.createOneShot(1000,VibrationEffect.DEFAULT_AMPLITUDE));
     }else{
     //deprecated in API 26 
            v.vibrate(1000);
     }

注意:

AndroidManifest.xmlファイルにパーミッションを含めることを忘れないでください。

<uses-permission Android:name="Android.permission.VIBRATE"/>
2
Prakhar Gupta

あなたはデバイスとその仕事を振動させることができます

   Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
           v.vibrate(100);

許可は必要ですが、実行時許可は必要ありません

<uses-permission Android:name="Android.permission.VIBRATE"/>
0
Ahmad

パターン/波 :で振動

import Android.os.Vibrator;
...
// Vibrate for 500ms, pause for 500ms, then start again
private static final long[] VIBRATE_PATTERN = { 500, 500 };

vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // API 26 and above
    mVibrator.vibrate(VibrationEffect.createWaveform(VIBRATE_PATTERN, 0));
} else {
    // Below API 26
    mVibrator.vibrate(VIBRATE_PATTERN, 0);
}

プラス

AndroidManifest.xmlに必要な権限:

<uses-permission Android:name="Android.permission.VIBRATE"/>
0
Maksim Ivanov