2015-03-11 2 views
3

Je suis nouveau sur le développement Android. Je veux faire une application qui est essentiellement un lecteur de musique, mais le téléphone peut vibrer au rythme de la musique en cours de lecture. Je me souviens que les premiers téléphones Nokia avaient cette fonctionnalité, je veux recréer cela pour le plaisir.Android - Comment faire vibrer le téléphone à la musique

Ma question: est-ce possible comme application Android? Si oui, quelles sont les approches générales? Dois-je analyser les motifs sonores de la chanson, puis modifier l'intensité de la vibration?

Merci!

Répondre

5

Je me suis intéressé à cette question et après des recherches approfondies, j'ai compris comment faire. Alors on y va.

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(); 
} 

Cette approche générale est de jouer de la musique et maintenant travailler serré avec la méthode vibrate();. De tous les constructeurs de la classe Vibrator nous avons besoin de celui-ci:

public void vibrate (long milliseconds, AudioAttributes attributes); 

Il a été ajouté dans API 21 En tant que premier paramètre, nous pouvons passer la durée de la chanson et cette durée, nous pouvons obtenir de cette façon (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); 

en tant que deuxième paramètre, nous devons créer AudioAttributes avec l'aide de AudioAttributes.Builder:

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

S'il vous plaît, NOTE: Je ne l'ai pas essayé. Mais le doc a dit que cela devrait fonctionner correctement. Dites-moi si cela est terminé. Cordialement.

post-scriptum Ne pas oublier la permission:

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