2016-08-25 5 views
2

Я пытаюсь вызвать AlarmManager из моего проекта изнашивания Android. Но по некоторым причинам его провал. Следующий мой код для этого. Я уверен, что я вызываю метод setAlarm в AlarmReceiver (мой журнал печатает), но после этого ничего не происходит. Моя цель - запустить будильник каждые 30 секунд. Когда вызывается AlarmReceiver onReceive. SendBroadcast для моей службы, которая, в свою очередь, отправит сообщение на сервер. Что я делаю неправильно здесь.AlarmManager не работает в ношении Android

Manifest Детали:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

В заявке

<receiver android:name=".alarm.AlarmReceiver" /> 
     <receiver 
      android:name=".alarm.SampleBootReceiver" 
      android:enabled="false"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 

AlarmManager:

public class AlarmReceiver extends WakefulBroadcastReceiver { 

    private static final String TAG = "AlarmReceiver"; 

    // The app's AlarmManager, which provides access to the system alarm services. 
    private AlarmManager alarmMgr; 
    // The pending intent that is triggered when the alarm fires. 
    private PendingIntent alarmIntent; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG,"AlarmReceiver onReceive*******"); 
     Intent sensorIntent = new Intent("sensor"); 
     LocalBroadcastManager.getInstance(context).sendBroadcast(sensorIntent); 
    } 

    public void setAlarm(Context context) { 
     Log.d(TAG,"Alarm Manager started"); 
     alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, AlarmReceiver.class); 
     alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

     alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       System.currentTimeMillis()+1000,60000,alarmIntent); 

     ComponentName receiver = new ComponentName(context, SampleBootReceiver.class); 
     PackageManager pm = context.getPackageManager(); 

     pm.setComponentEnabledSetting(receiver, 
       PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
       PackageManager.DONT_KILL_APP); 

    } 
} 

SampleBootReceiver:

public class SampleBootReceiver extends BroadcastReceiver { 
    AlarmReceiver alarm = new AlarmReceiver(); 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) 
     { 
      alarm.setAlarm(context); 
     } 
    } 
} 

ответ

0

Возможно, вы захотите проверить Creating and Running a Wearable App и Packaging Wearable Apps, чтобы убедиться, что вы можете соединить карманный компьютер с устройством для ношения.

При разработке износа важна правильная связь/соединение между переносным устройством и носимым устройством при отправке и получении сообщений. Используйте MessageApi, чтобы отправить сообщение в носитель, чтобы начать свою деятельность. Чтобы получать уведомления о полученных сообщениях, выполните интерфейс MessageListener, чтобы предоставить слушателю сообщения о событиях.

Вы также можете увидеть мой ответ here и еще один связанный с ним вопрос here. Также здесь есть учебник по Wearable Notification и Android Wear Development.

Надеюсь, это поможет!

+0

У моего приложения для Android и мобильного приложения Android нет проблем с отправкой сообщений взад и вперед. Мне нужно отправить сообщения, которые я отправляю с телефона на телефон. Для синхронизации в настоящее время я использую Handler.postDelayed, который работает отлично, но я хотел бы отправлять сообщение все время, даже когда процессор переходит в режим сна. Поэтому я выбрал этот. – praneel

0

Начиная с уровня API 19 Доставка сигналов неточна: ОС сбрасывает аварийные сигналы, чтобы минимизировать пробуждения и использование батареи.

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

Чтобы гарантировать использование доставка setExactAndAllowWhileIdle

Как setExact(int, long, PendingIntent), но этот сигнал будет разрешено выполнять даже тогда, когда система находится в режиме простоя с низким энергопотреблением. Если вам не требуется точное планирование сигнала тревоги, но все равно необходимо выполнить его на холостом ходу, рассмотрите возможность использования setAndAllowWhileIdle(int, long, PendingIntent).

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