Android sensor架构(一)应用如何使用sensor(and5.1)

我们先从最上面的应用讲起:

应用如何使用sensor的数据呢:

一、应用使用sensor

可以在应用中自己写一个SensorEventListener,然后注册到SensorManager中,注册的时候可以选择哪个sensor,然后也可以自己指定handler,防止在主线程中卡死。

[java]  view plain  copy
  1. private void registerListener() {  
  2.     SensorManager sm = (SensorManager)mContext.getSystemService(Context.SENSOR_SERVICE);  
  3.     sm.registerListener(mSensorListener, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),  
  4.                     SensorManager.SENSOR_DELAY_NORMAL);  
  5. }  
[java]  view plain  copy
  1.     private final SensorEventListener mSensorListener = new SensorEventListener() {  
  2.         @Override  
  3.         public void onSensorChanged(SensorEvent event) {  
  4.             if (Sensor.TYPE_ACCELEROMETER == event.sensor.getType()) {  
  5.   
  6. ............  


二、SensorManager

我们先来看应用是如何获取到SensorManager的,下面这段代码是在ContextImpl.Java中,这个文件时Context类的实现类。

[java]  view plain  copy
  1. @Override  
  2. public Object getSystemService(String name) {  
  3.     ServiceFetcher fetcher = SYSTEM_SERVICE_MAP.get(name);  
  4.     return fetcher == null ? null : fetcher.getService(this);  
  5. }  
再看下面可以知道,SensorManager是SystemSensorManager类。
[java]  view plain  copy
  1.    private static final HashMap<String, ServiceFetcher> SYSTEM_SERVICE_MAP =  
  2.            new HashMap<String, ServiceFetcher>();  
  3.   
  4.    private static int sNextPerContextServiceCacheIndex = 0;  
  5.    private static void registerService(String serviceName, ServiceFetcher fetcher) {  
  6.        if (!(fetcher instanceof StaticServiceFetcher)) {  
  7.            fetcher.mContextCacheIndex = sNextPerContextServiceCacheIndex++;  
  8.        }  
  9.        SYSTEM_SERVICE_MAP.put(serviceName, fetcher);  
  10.    }  
  11.   
  12.    // This one's defined separately and given a variable name so it  
  13.    // can be re-used by getWallpaperManager(), avoiding a HashMap  
  14.    // lookup.  
  15.    private static ServiceFetcher WALLPAPER_FETCHER = new ServiceFetcher() {  
  16.            public Object createService(ContextImpl ctx) {  
  17.                return new WallpaperManager(ctx.getOuterContext(),  
  18.                        ctx.mMainThread.getHandler());  
  19.            }};  
  20.   
  21.    static {  
  22.   
  23. ...........  
  24.   
  25.        registerService(SENSOR_SERVICE, new ServiceFetcher() {  
  26.                public Object createService(ContextImpl ctx) {  
  27.                    return new SystemSensorManager(ctx.getOuterContext(),  
  28.                      ctx.mMainThread.getHandler().getLooper());  
  29.                }});  
  30.    ...........  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值