锁定

时间:2016-04-16 08:36:18

标签: android android-service

我正在开发一个使用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)

感谢您的帮助!

0 个答案:

没有答案