2015-12-11 2 views
0

Я сделал приложение с: активностью (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); 
} 
} 

Служба используется для обнаружения (на смартфоне), если соединение с SmartWatch теряется.

служба

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 не выполняется). Я не знаю почему.

+0

Как вы «закрываете» приложение: отступаете, нажав кнопку «Домой», вытаскивая его из списка недавних задач? –

+0

Вычистите его из списка недавних задач. – tomss

ответ

0

Попробуйте добавить

filter.addAction(Intent.ACTION_SCREEN_OFF); 

к вашему IntentFilter. Надеюсь, это поможет!

0

В ответ на мой комментарий вы объяснили, что вы закрываете приложение, вытаскивая его из списка недавних задач. Это действие заставляет процесс вашего приложения быть убитым. Поскольку вы возвращаете START_STICKY от onStartCommand() в свою службу, система создаст новый экземпляр вашего приложения в новом процессе и вызовет onStartCommand(), чтобы перезагрузить службу. Это единственная запись, внесенная в ваше приложение. Никакие действия не воссозданы. Я очень мало знаю об Wear. Я предполагаю, что ваше приложение выполняет некоторую обработку конфигурации для поиска и подключения к узлам. Если эта обработка выполняется в некоторых действиях, таких как ваша активность запуска, она не будет выполняться, когда ваше приложение будет воссоздано для перезапуска службы.

Смежные вопросы