2015-03-11 2 views
3

Я новичок в разработке Android. Я хочу сделать приложение, которое по сути является музыкальным проигрывателем, но телефон может вибрировать в такт музыки. Я помню, что самые ранние телефоны Nokia имели эту функцию, я хочу воссоздать это для удовольствия.Android - Как заставить телефон вибрировать при воспроизведении музыки

Мой вопрос: возможно ли это как приложение для Android? Если да, то каковы общие подходы? Должен ли я анализировать звуковые паттерны песни, а затем изменять интенсивность вибрации?

Спасибо!

ответ

5

Меня заинтересовал этот вопрос, и после глубоких исследований я понял, как это сделать. Итак, идем.

import android.media.MediaPlayer; 
import android.os.Vibrator; 

private Vibrator vibrator; 
private MediaPlayer player; 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    player = MediaPlayer.create(this, R.raw.music); 
    vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 

    player.start(); 

    //HERE WE WILL START VIBRATION 

    Button button = (Button) findViewById(R.id.btn); 
    button.setOnClickListener(this); 
} 

public void onClick(View v){ 
    player.stop(); 
    vibrator.cancel(); 
} 

Это общий подход для воспроизведения музыки и теперь работает плотно с методом vibrate();. Из всех конструкторов класса Vibrator нам это нужно один:

public void vibrate (long milliseconds, AudioAttributes attributes); 

Он был добавлен в API 21 качестве первого параметра можно передать продолжительность песни и этот срок мы можем получить этот путь (source):

String mediaPath = Uri.parse("android.resource://<your-package-name>/raw/filename").getPath(); 
MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
mmr.setDataSource(mediaPath); 
String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 

в качестве второго параметра необходимо создать AudioAttributes с помощью AudioAttributes.Builder:

vibrator.vibrate(duration, new AudioAttributes.Builder() 
       .setUsage(AudioAttributes.USAGE_MEDIA) 
       .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 
       .build()); 

ПРИМЕЧАНИЕ: Я не пробовал. Но док сказал, что он должен хорошо работать. Сообщите мне, если это будет закончено. С уважением.

P.S. Не забывайте разрешение:

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