首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android: gps /传感器日志记录服务

Android: gps /传感器日志记录服务
EN

Stack Overflow用户
提问于 2010-12-15 04:08:27
回答 2查看 3.6K关注 0票数 2

我正在寻找实现服务的最佳实践,以便定期(每10-60秒)记录gps或其他传感器的值。当电话进入休眠状态时,该服务应处理待机模式。

任何帮助(伪代码或教程)都非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-29 02:57:19

即使设备可能会进入睡眠状态,也不可能让方向传感器持续工作数小时(请参阅http://code.google.com/p/android/issues/detail?id=3708#makechanges

一旦显示器熄灭,感应器也会做同样的事。:(

我现在实现了一个wakelock (需要权限)

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

与定时器和广播接收器相结合,将再次打开显示器。这当然是疯狂的电池寿命,但到目前为止,我没有找到其他方法。

这是我在服务中的onCreate方法:

代码语言:javascript
运行
复制
@Override
public void onCreate() {
mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
CONTEXT = this;
PowerManager pm = (PowerManager) CONTEXT.getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "my tag");
mWakeLock.acquire();
Log.d(TAG, "Wakelock acquired");
// register receiver that handles screen on and screen off logic
            IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_OFF);
            BroadcastReceiver mReceiver = new ScreenReceiver();
            registerReceiver(mReceiver, filter);
}

这是服务的onStart方法:

代码语言:javascript
运行
复制
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onStart");
boolean screenOn = intent.getBooleanExtra("screen_state", false);
            if (!screenOn) {
                Log.d(TAG, "Screen is on");
            } else {
             Log.d(TAG, "Screen is off");
         Timer timer = new Timer("DigitalClock");
     timer.schedule(new TimerTask() {
        @Override
        public void run() {
         Log.d(TAG,"Waiting 1 sec for switching the screen back on again...");
     PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
     mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
         "my tag");
     mWakeLock.acquire();
        }
     }, 1000);
             mWakeLock.acquire();
                }
}

这是BroadcastReceiver类:

公共类ScreenReceiver扩展了BroadcastReceiver {私有布尔值screenOff;@Override public void onReceive(Context context,Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { screenOff = true;} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { screenOff = false;} Intent i=新意图(context,MyService.class);i.putExtra("screen_state",screenOff);context.startService(i);}

}

这个变通方法也适用于通过USB从调试器拔出的设备(我第一次遇到这个问题)。

如果您有更好的解决方案,或者2.3中是否有修复,请让我知道。谢谢!

票数 3
EN

Stack Overflow用户

发布于 2010-12-15 04:52:44

这里有一个关于如何使用Android服务的教程的链接。LINK这里有一个关于如何从传感器读取数据的教程的链接。LINK

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4443660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档