[Google IO 2010] Android入门指导

使用Alarm


 

Alarm可以用来在未来某个时刻发出一个广播,从而唤醒应用程序。用这种机制来替代一个长期运行的Service。

 1 String alarm = Context.ALARM_SERVICE;
 2 AlarmManager am;
 3 am = (AlarmManager) getSystemService(alarm);
 4 
 5 Intent intent = new Intent("REFRESH_THIS");
 6 PendingIntent op = PendingIntent.getBroadcast(this, 0, intent, 0);
 7 
 8 int type = AlarmManager.ELAPSED_REALTIME_WAKEUP;
 9 long interval = AlarmManager.INTERVAL_FIFTEEN_MINUTES;
10 long triggerTime = SystemClock.elapsedRealtime() + interval;
11 
12 am.setRepeating(type, triggerTime, interval, op);

也可是使用非精确型Alarm,即拥有Alarm的全部好处,同时消耗更少的电量

am.setIntexactRepeating(type, tirggerTime, interval, op);

 

LBS服务


 

String serviceName = Context.LOCATION_SERVICE;
LocationManager lm = (LocationManager) getSystemService(serviceName);

LocationListener listener = new LocationListener() {
    public void onLocationChanged(Location location) {
        // TODO
    }

    ...
};

lm.requestLocationUpdate("gps", 0, 0, 1); // 第二,三参数用来指定最小更新频率和距离

需要考虑的问题:

  • 更新频率
  • 处理GPS或者Wifi LBS关闭的情况
  • 定位精度
  • 对电池的消耗
  • 处理地址跳跃

使用Criteria来选择定位器

Criteria可以指明对定位器的需求和偏好设置,可以只寻找活跃的定位器。

Criteria criteria = new Criteria();
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(false);

String provider = lm.getBestProvider(criteria, true);

lm.requestLocationUpdate(provider, freq, dist, l);

可以使用多个监听器,每个对应于不同的精度、频率或者距离。根据变化相应地增加和删除监听器。

private LocationListener lbounce = new LocationListener() {

    public void onLocationChanged(Location location) {
        runLocationUpdate();
        if (location.getAccuracy() < 10) {
            lm.removeUpdates(lbounce);
            lm.removeUpdates(lcoarse);
        }
    }
    ...

};

 

posted @ 2013-04-23 10:26  断桥残雪  阅读(253)  评论(0编辑  收藏  举报