如何在android中创建一个服务线程或只是一个服务,直到服务明确停止为止?

时间:2014-12-29 12:06:39

标签: java android multithreading android-service

我想要一个服务,看看是否连接了耳机。如果他们已经连接,那么做一些事情&断开连接时做别的事。我希望服务或线程能够运行,直到通过按下它的活动上的停止按钮显式停止它。

这是我的onStartCommand()代码&我想要运行的代码是函数theRun()

public class MyService extends Service {

 private final static String Headset_Flag = "android.intent.action.ACTION_HEADSET_PLUG";

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

            Log.i(TAG, "Service onStartCommand " + startId);
            theRun tR= new theRun();
            tR.start();
            return super.onStartCommand(intent, flags, startId);
        }


private class theRun extends Thread
    {
        Runnable r = new Runnable() {
            public void run() {
//                Log.i(TAG, "Service In Run " + currentId);
                try {
                    AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

                    if (AudioManager.ACTION_HEADSET_PLUG.equals(Headset_Flag)) {

                        switch (am.getRingerMode()) {
                            case AudioManager.RINGER_MODE_SILENT:
                                am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                                Log.i(TAG, "Silent mode" + am.getRingerMode());
                                break;
                            case AudioManager.RINGER_MODE_VIBRATE:
                                am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                                Log.i(TAG, "Vibrate mode");
                                break;
                            case AudioManager.RINGER_MODE_NORMAL:
                                Log.i(TAG, "Normal mode");
                                break;
                        }
                    }
                }

                catch(Exception e){
                    String msg = e.getMessage();
                    msg.toString();
                }
            }


        };
    }

如果我在那里插入我的代码,该服务只会在onStartCommand()上执行一次。但是如何运行服务或线程,直到它被Activity明确停止?请指导我。

1 个答案:

答案 0 :(得分:0)

onStartCommand 方法中返回 START_STICKY 执行此操作

试试这个

 @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i("LocalService", "Received start id " + startId + ": " + intent);
    theRun tR= new theRun();
    tR.start();
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

参考this