Android --- 常用的系统服务(二)

目前涉及的交互窗口Activity、 Dialog

WindowManager窗口管理器

可以完成窗口的显示、 更新、 销毁的处理

获取窗口管理器对象.

private WindowManager wm;
...

//获取对象
wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

初始化窗口的显示效果, 需要依赖于WindowManager.LayoutParams

//窗口配置参数
private WindowManager.LayoutParams lp;

...
lp = new WindowManager.LayoutParams();

配置窗口显示效果

//配置窗口的显示类型
lp.type = WindowManager.LayoutParams.TYPE_APPLICATION;
//透明背景(透明)
lp.format = PixelFormat.TRANSPARENT;
//配置窗口的特性,FLAG_NOT_TOUCH_MODAL不可触摸不影响后面的事件的响应, FLAG_NOT_FOCUSABLE不获取焦点
lp.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
//窗口的显示位置
lp.gravity = Gravity.CENTER;
// lp.x = 200;
// lp.y = 300;
lp.width = 300;
lp.height = 200;

显示窗口布局

wm.addView(windowLayout, lp);

更新窗口效果

int x = lp.x+10;
int y = lp.y +20;
lp.x = x;
lp.y = y;
wm.updateViewLayout(windowLayout,lp);

移除窗口

wm.removeView(windowLayout);

系统类型的弹框

lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
需要的权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

窗口如果要加上硬件加速需要在flag中添加WindowManager.LayoutParams.FLAGHARDWAREACCELERATED

lp.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
SensorManager传感器

传感器管理器主要可以监听设备上的加速度、 温度、 光感、 方向、 磁力、 陀螺仪、 压力、 温度、 重力等等传感器信息

1、 获取传感器管理器

private SensorManager sensorManager;
...
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

2、 定义传感器监听器

private SensorEventListener sensorEventListener = new SensorEventListener() {
    //传感器数据发生变化
    @Override
    public void onSensorChanged(SensorEvent event) {
        //针对重力加速度可以得到3个方向的重力信息
        float[] values = event.values;
        float x = values[0];
        float y = values[1];
        float z = values[2];
        Log.e("m_tag","X:"+x+" Y:"+y+" Z:"+z);
    } 
    //灵敏度发生变化
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
};

3、 注册监听

//第一个参数表示监听器
//第二个参数表示监听的传感器类型, 通过sensorManager.getDefaultSensor(Sensor类型)
//灵敏度SENSOR_DELAY_UI普通等级, SENSOR_DELAY_GAME游戏等级, SENSOR_DELAY_FASTEST最快的
sensorManager.registerListener(sensorEventListener,
    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
    SensorManager.SENSOR_DELAY_UI);

4、 取消注册

sensorManager.unregisterListener(sensorEventListener);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值