Android:是否可以在主屏幕上使用小部件来检测移动/摇动?

时间:2013-11-22 22:50:38

标签: android android-widget accelerometer

我正在尝试为主屏幕创建一个Android小部件,如果检测到移动,它将更改小部件图标。

我知道如何使用AppWidgetProvider RemoteViews创建窗口小部件以及如何更改窗口小部件图标, 我还可以使用Sensor.TYPE_ACCELEROMETER检测移动,Activity。但是你知道没有活动在运行,我也不知道 如何通过小部件检测动作,请分享您的想法。

我想到了一项服务,但不知道如何让它继续运行,这将检测摇动/动作,并可能在我的自定义AppWidgetProvider中设置静态变量 在更新的地方我可能会检查该静态变量的状态,如果它已更改,我可以更改小部件的图标。 提前谢谢。

注意:我使用的是API级别8. android:minSdkVersion="8"

解决方案: 我接受了答案,因为它帮助我搜索我正在寻找的东西,最后我成功了,这就是我做的方式

我的AppWidgetProvider类实现启动自定义Service,此服务在后端运行,实现SensorEventListener,我已覆盖方法onStartCommand并创建了一个对象SensorManager类的Notification,并且还创建了一个@Override public int onStartCommand(Intent intent, int flags, int startId) { if (sensorManager == null) { sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); } Notification notification = new Notification(R.drawable.MyIcon,"In Action", System.currentTimeMillis()); Intent notificationIntent = new Intent(this, SayHello.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(this, "In Action","Service is running in foreground", pendingIntent); //This worked for me startForeground(ONGOING_NOTIFICATION_ID, notification); return START_NOT_STICKY; } 的对象,它显示在通知区域中,我开始将我的通知作为前景。

{{1}}

1 个答案:

答案 0 :(得分:1)

为了使其正常工作,我认为你需要使用foreground service(它有自己的通知让它继续运行)。

这可能会对电池产生影响,因此您可能想要考虑替代方案。

然而,有一些东西可能对你有意思,而不是使用你自己的传感器算法:谷歌已经展示了如何处理“(最终用户)活动识别”,如跑步/步行/ .... here's a link关于它。它应该比创建自己的机制更有效。