我正在尝试为主屏幕创建一个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}}
答案 0 :(得分:1)
为了使其正常工作,我认为你需要使用foreground service(它有自己的通知让它继续运行)。
这可能会对电池产生影响,因此您可能想要考虑替代方案。
然而,有一些东西可能对你有意思,而不是使用你自己的传感器算法:谷歌已经展示了如何处理“(最终用户)活动识别”,如跑步/步行/ .... here's a link关于它。它应该比创建自己的机制更有效。