2016-08-25 86 views
2

我想从我的Android磨损项目调用AlarmManager。但由于某些原因,它失败了。以下是我的代码相同。我确信我正在AlarmReceiver中调用setAlarm方法(我的日志正在打印),但之后没有任何反应。我的目标是每30秒发出一次警报。当AlarmReceiver onReceive被调用时。 SendBroadcast到我的服务,这反过来将消息发送到服务器。我在这里做错了什么。AlarmManager不工作在Android Wear

清单详细信息:

<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 AppPackaging Wearable Apps以确保您可以将掌上电脑与佩戴设备配对。

在穿戴发展中,手持设备和可穿戴设备之间的正确通信/配对对发送和接收消息很重要。利用MessageApi,发送消息给穿戴者开始一项活动。要收到收到的消息的通知,请执行MessageListener接口以提供消息事件的侦听器。

你也可以看到我的回答here和另一个相关的SO问题here。这里还有关于Wearable NotificationAndroid Wear Development的教程。

希望它有帮助!

+0

我的android Wear应用程序和移动应用程序没有任何问题来回发送消息。我需要将我从手表发送的信息发送到手机。为了计时,目前我正在使用Handler.postDelayed,它工作得很好,但是我想要一直发送消息,即使CPU进入睡眠状态。所以我选择了这个。 – praneel

0

从API级别19开始报警传送并不精确:操作系统将切换报警以最大限度地减少唤醒和电池使用。

这在低功耗模式下的可穿戴设备上尤其如此。

为了保证交付使用setExactAndAllowWhileIdle

setExact(int, long, PendingIntent),但这个报警将被允许执行,即使系统处于低功耗空闲模式。如果您不需要精确安排报警,但仍然需要在空闲时执行,请考虑使用setAndAllowWhileIdle(int, long, PendingIntent)