服务未运行:app关闭,智能手机屏幕关闭

时间:2015-12-11 14:55:35

标签: android

我创建了一个应用程序:启动服务的活动(MainActivity)(SmartphoneListener)。

活动

public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent = new Intent(this,SmartphoneListener.class);
    startService(intent);
}
}

该服务用于检测(在智能手机上)与智能手表的连接是否丢失。

服务

public class SmartphoneListener extends WearableListenerService {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyWakelockTag"); //Service running even if the screen is off.
    wakeLock.acquire();
    return START_STICKY;
}

@Override
public void onPeerDisconnected(Node node){
    Toast.makeText(getApplicationContext(),"Communication with smartwatch lost",Toast.LENGTH_SHORT).show();
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    registerReceiver(mIntentReceiver, filter);
}

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver(){
    public void onReceive(Context context, Intent intent) {
        //
    }
};
...
}

如果我的应用程序已打开且智能手机屏幕关闭,我可以检测到我是否丢失了与smartwatch的连接(执行了mIntentReceiver代码)。 然后如果我关闭我的应用程序并且智能手机屏幕关闭,我无法检测到我是否丢失了与smartwatch的连接(未执行mIntentReceiver代码)。 我不知道为什么。

2 个答案:

答案 0 :(得分:0)

尝试添加

filter.addAction(Intent.ACTION_SCREEN_OFF);

到您的IntentFilter。希望它有所帮助!

答案 1 :(得分:0)

您在对我的评论的回复中解释说您已经"关闭"应用程序通过从最近的任务列表中滑动它。此操作会导致您的应用程序被杀死。由于您在服务中从START_STICKY返回onStartCommand(),系统会在新流程中创建您应用的新实例,并致电onStartCommand()重新启动您的服务。这是您的应用中唯一的条目。不会重新创建任何活动。我对Wear很了解。我猜你的应用程序会执行一些配置处理来定位和连接节点。如果该处理在某些活动中完成,例如您的启动活动,则在重新创建应用以重新启动您的服务时,将不会执行该处理。