2012-02-10 2 views
0

Я вибрировать службу в андроид и установить продолжительность = 500мс, как показано нижеПочему мое приложение постоянно вибрирует?

Vibrator v = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE);   

long milliseconds = 500; 

v.vibrate(milliseconds); 

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

Пожалуйста, помогите мне.

Большое спасибо.

/**Edit*/

спасибо за ваши ответы,

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

Vibrator v = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE); 
long milliseconds = 500; 
v.vibrate(milliseconds); 

MediaPlayer mp = MediaPlayer.create(this, R.raw.normal); 
mp.start(); 
mp.setOnCompletionListener(new OnCompletionListener() { 
    public void onCompletion(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     mp.release(); 
    } 
}); 
PowerManager pm = (PowerManager) this 
      .getSystemService(Context.POWER_SERVICE); 
mWakelock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK 
      | PowerManager.ACQUIRE_CAUSES_WAKEUP, "AlarmScreen"); 
mWakelock.acquire(120000); 

дело в том, что иногда она работает нормально, но иногда она вибрирует и постоянно останавливаются только когда я перехожу на экране.

ответ

1

Попробуйте использовать в таком способе ...

Vibrator v = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE); 
    v.vibrate(2000); 

Снимите:

this. 

и все будет хорошо

+0

«это» здесь является сам объект службы. Я не думаю, что это вопрос моей проблемы. – MichaelP

+0

Попробуйте mp.release() перед mp.start() каждый раз, когда вы вызываете mediaplayer ... – timonvlad

+0

спасибо, но я получил исключение IllegalStateException, когда я вызываю mp.release() до mp.start() – MichaelP

0

Проблема не код, который вы используете чтобы вибрировать устройства, это, вероятно, код, вызывающий вибрацию. Я предполагаю, что вы находитесь в какой-то петле, которая вызывает вибрацию. Можете ли вы показать код, используемый для начала вибрации?

+0

Я только что редактировал мой вопрос , вы можете видеть это выше. – MichaelP

0

Вы можете принудительно остановить вибрацию с помощью задержки

final Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
v.vibrate(2000); 

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
@Override 
public void run() { 
    //Do something after 2000ms (avoid random vibrations) 
    v.cancel(); 
    } 
}, 2000);