我正在开发一个使用cordova的小型APP,但由于webview的局限性,我需要在原生java中使用socket.io连接。
我制作了一个插件,并且该插件启动了一项服务,此服务现在有一个使用振动API的计时器让手机每秒振动一次进行测试,这是我的代码:
public class SamplePlugin extends CordovaPlugin {
private static final String TAG = "SamplePlugin";
Timer timer = new Timer();
public Context context;
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
// your init code here
context = cordova.getActivity().getApplicationContext();
context.startService(new Intent(context, MyService.class));
}
}
现在我的服务示例:
public class MyService extends Service {
private static final String TAG = "MyService";
private static Timer timer = new Timer();
private Context ctx;
private PowerManager.WakeLock wl;
private PowerManager pm;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
ctx = this;
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
wl.acquire();
// Let it continue running until it is stopped.
Log.i(TAG, "START SERVICE");
timer.scheduleAtFixedRate(new mainTask(ctx), 0, 1000);
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "STOP SERVICE");
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}
private class mainTask extends TimerTask {
private Context context;
public mainTask(Context context) {
this.context=context;
}
public void run() {
Log.i(TAG, "SERVICE TICK");
Vibrator v = (Vibrator) getSystemService(VIBRATOR_SERVICE);
v.vibrate(200);
}
}
}
但是,当我从手机上拔下USB并锁定我的屏幕时,在大约10秒内振动停止,如果我再次激活屏幕或插上电缆,振动会恢复,但如果我在没有USB或充电器的情况下锁定10秒振动停止,就像系统关闭应用程序一样。
你可以尝试一些东西,拿一个唤醒锁(尝试使用Full,Partial ans Screen),但是在10秒锁定振动停止。
尝试将服务放入STICKY,如果从APP列表中关闭APP,服务将运行包含!但是当锁屏时,大约10秒钟就停止......
我看到的一件事是,我在插件上下文中启动服务,但我认为这不是问题(因为在关闭APP的STICKY中运行)
它可能,始终保持服务在后台运行?它是android系统的限制? (我的Nexus 5植根于Android 6.0)
感谢您的帮助!