2015-12-11 77 views
0

我通过以下内容创建了应用程序:启动服务(SmartphoneListener)的活动(MainActivity)。服务未运行:应用程序关闭,智能手机屏幕关闭

活动

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) { 
     // 
    } 
}; 
... 
} 

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

+0

你如何“关闭”你的应用程序:退出,按主屏幕按钮,从最近的任务列表中刷过它? –

+0

从最近的任务列表中滑动。 – tomss

回答

0

尝试

filter.addAction(Intent.ACTION_SCREEN_OFF); 

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

0

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