2013-11-22 2 views
-1

Я пытаюсь сделать виджет Android для домашнего экрана, который изменит значок виджета, если обнаружено движение.Android: Можно ли обнаружить движение/встряску с помощью виджета на главном экране?

Я знаю, как создать виджет и как изменить значок виджета с помощью AppWidgetProviderRemoteViews, Я также способен обнаруживать движение с помощью 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

для того, чтобы это работало, я думаю, вам нужно использовать foreground service (который имеет свое собственное уведомление, чтобы он продолжать работать).

Это может привести к падению заряда батареи, поэтому вы можете подумать об альтернативе.

Однако для вас может быть интересно, а не использовать собственный алгоритм датчиков: google показал, как обрабатывать «распознавание активности» (например, запуск/ходьба/...). here's a link об этом. он должен быть более эффективным, чем создание собственного механизма.

+0

Спасибо за ваш ответ, мне не нужно обнаруживать дополнительное движение только встряхивание или передвижное движение [уже было сделано с встроенным API Android], как бы я это не помню, если я до этого такого приложения, однако теперь я прочитаю вашу первую ссылку. благодаря –

Смежные вопросы