Как вызвать вибратор внутри службы в Android

Я пытаюсь запустить vibrator, если служба вызывается из моего приложения. Я запускаю службу из Fragment, но я не знаю, почему вибратор не работает внутри службы. Я даже не смог распечатать Toast. Мой код: < бр>

Вызов из фрагмента:

Intent buzz= new Intent(getActivity(),LocBuzzService.class);
   getActivity().startService(buzz);

Класс обслуживания:

public class LocBuzzService extends Service {

    private static final String TAG = "HelloService";
    private boolean isRunning  = false;
    public Vibrator vibrator;

    @Override
    public void onCreate() {
        Log.i(TAG, "Service onCreate");
        isRunning = true;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        Log.i(TAG, "Service onStartCommand");
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    Log.i(TAG, "I am in thread");
                    Toast.makeText(getApplicationContext(),"I am here",Toast.LENGTH_LONG).show();
                    vibrator = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
                    vibrator.vibrate(3000);
                    vibrator.cancel();

                }catch (Exception e){

                }

                stopSelf();
            }
        }).start();


        return Service.START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {

        Log.i(TAG, "Service onBind");
        return null;
    }

    @Override
    public void onDestroy() {

        Log.i(TAG, "Service onDestroy");
        isRunning = false;
    }
}

Я также пробовал это и не работал:

  vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

Я видел в logcat, что вызываются все функции внутри класса обслуживания, и я также включил разрешение.

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

person Setu Kumar Basak    schedule 02.05.2015    source источник
comment
возникает ли исключение в блоке catch?   -  person adjan    schedule 02.05.2015
comment
Почему вы отменяете его сразу после вызова vibrate()?   -  person Robert Estivill    schedule 02.05.2015
comment
Я хочу запустить вибратор на 3 секунды, а затем отменить его   -  person Setu Kumar Basak    schedule 02.05.2015
comment
Удалите эту строку. Вызов вибрации (3000) не блокируется, поэтому вибрация отменяется еще до ее начала. Вибрация прекратится через 3000, отменять ее не нужно.   -  person Robert Estivill    schedule 02.05.2015
comment
Кроме того, никогда не перехватывайте исключение, не регистрируя его, особенно при отладке приложения.   -  person CommonsWare    schedule 02.05.2015
comment
Я отменил эту строку, но она не работает.   -  person Setu Kumar Basak    schedule 02.05.2015
comment
Это сработало, когда я удалил тост. Как я могу распечатать тост в службе ??   -  person Setu Kumar Basak    schedule 02.05.2015
comment
Вызов Toast должен выполняться в основном потоке. Тот факт, что вы не регистрировали исключение, не помог, так как я уверен, что было выбрано исключение.   -  person Robert Estivill    schedule 02.05.2015


Ответы (1)


package com.mani.smsdetect;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.Vibrator;
import android.support.annotation.Nullable;

public class SampleService extends Service{

    Vibrator vibrator;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        vibrator.vibrate(2000);
        return super.onStartCommand(intent, flags, startId);

    }


}

Добавьте разрешение на вибратор для AndroidManifest.xml:

<uses-permission android:name="android.permission.VIBRATE"/>
person Manikanta Reddy    schedule 12.04.2016