我希望在用户将iphone抬到脸上时收到通知.就像siri一样.可能吗?
添加更具体的要求:当用户将手机放在耳边时,我想让屏幕变暗.我知道可以启用接近传感器来实现这一点.但令人讨厌的是,当用户将手指移到传感器上时,屏幕会不时变暗.所以我想知道如何避免这种情况,只有当用户抬起iphone说话时才会使屏幕变暗?
Intent intent = new Intent(Intent.ACTION_VIEW,
Hardware.Preferences.CONTENT_URI);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
当我给上面的代码启用传感器....他们显示错误.... @ Hardware.Preferences.CONTENT_URI); ...说创建类硬件... PLZ帮助...我是初学者在android ...
自从我开始使用此功能并且尚未成功获得有效结果以来已过去几天.
我想要的基本上是将加速度矢量从设备坐标系转换为真实世界坐标.我知道这是可能的,因为我有相对坐标的加速度,我知道设备在现实世界系统中的方向.
阅读Android开发人员似乎使用getRotationMatrix()我得到R =旋转矩阵.
因此,如果我想要A(世界系统中的加速度矢量)来自A'(电话系统中的加速度矢量),我必须做到:
A=R*A'
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么矢量A总是第一个和第二个零件为零(例如:+0,00; -0,00; +6,43)
我目前的代码与此类似:
public void onSensorChanged(SensorEvent event) {
synchronized (this) {
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
accelerometervalues = event.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
geomagneticmatrix =event.values.clone();
break;
}
if (geomagneticmatrix != null && accelerometervalues != null) {
float[] Rs = new float[16];
float[] I = new float[16];
SensorManager.getRotationMatrix(Rs, I, accelerometervalues, geomagneticmatrix);
float resultVec[] = new float[4];
float relativacc[]=new float [4];
relativacc[0]=accelerationvalues[0];
relativacc[1]=accelerationvalues[1];
relativacc[2]=accelerationvalues[2];
relativacc[3]=0;
Matrix.multiplyMV(resultVec, 0, Rs, 0, relativacc, 0); …
Run Code Online (Sandbox Code Playgroud) 我有为2.3.3设计的软件,我使用的是重力传感器.
代码如下 -
private SensorManager sman = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);
private Sensor magnetfield, gravity;
...
magnetfield = sman.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
gravity = sman.getDefaultSensor(Sensor.TYPE_GRAVITY);
Run Code Online (Sandbox Code Playgroud)
我决定添加对2.1版的支持.但是在2.1中似乎不支持TYPE_GRAVITY,并且我得到一个Sensor.TYPE_GRAVITY
无法识别的错误.
问题 - A)当我搜索"Android重力传感器2.1"时,谷歌链接到2.1设备中演示重力传感器的视频.这是否意味着有办法获得它?B)如果没有,那么可以使用它的最低版本是什么?无法在SDK中找到它.
谢谢
我正在编写罗盘应用程序但由于某种原因无法访问所需的传感器.我已经实现了SensorEventListener
接口并以这种方式注册我的传感器:
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
Run Code Online (Sandbox Code Playgroud)
在我的onSensorChange()
方法中:
public void onSensorChanged(SensorEvent event) {
Toast t = Toast.makeText(this, "onSensorChanged", Toast.LENGTH_LONG);
t.setGravity(Gravity.TOP, 0, 0);
t.show();
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
mGravity = event.values;
}
if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
mGeomagnetic = event.values;
}
if(mGravity !=null && mGeomagnetic !=null){
float [] R = new float[9];
float [] I = new float [9];
boolean success = sensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
if(success){
float [] orientation = new float [3];
sensorManager.getOrientation(R, orientation);
north …
Run Code Online (Sandbox Code Playgroud) 我正在开发适用于Android的倾斜应用.我遇到了纵向和横向模式的问题.当音高= 90度(电话结束)时,甚至在滚动值没有发生任何物理变化时,滚动值变得疯狂之前.我一直无法找到解决这个问题的方法.如果有人能指出我正确的方向,我们将不胜感激.
这是一个简短的代码转储,所以你知道它不是加速度计误差.
final SensorEventListener mEventListener = new SensorEventListener(){
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
public void onSensorChanged(SensorEvent event) {
setListners(sensorManager, mEventListener);
SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet);
SensorManager.getOrientation(mRotationMatrix, mValuesOrientation);
synchronized (this) {
switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, mValuesAccel, 0, 3);
long actualTime = System.currentTimeMillis();
//Sensitivity delay
if (actualTime - lastUpdate < 250) {
return;
}
else {
sysAzimuth = (int)Math.toDegrees(mValuesOrientation[0]);
sysPitch = (int)Math.toDegrees(mValuesOrientation[1]);
sysRoll = (int)Math.toDegrees(mValuesOrientation[2]);
//invert direction with -1
pitch = (sysPitch - pitchCal)*-1;
roll = (sysRoll - …
Run Code Online (Sandbox Code Playgroud) 似乎缺少某些传感器的枚举值<android/sensor.h>
.
该文件定义了以下枚举:
/*
* Sensor types
* (keep in sync with hardware/sensor.h)
*/
enum {
ASENSOR_TYPE_ACCELEROMETER = 1,
ASENSOR_TYPE_MAGNETIC_FIELD = 2,
ASENSOR_TYPE_GYROSCOPE = 4,
ASENSOR_TYPE_LIGHT = 5,
ASENSOR_TYPE_PROXIMITY = 8
};
Run Code Online (Sandbox Code Playgroud)
评论说这个枚举是同步的<hardware/sensor.h>
(没有暴露,它是android源码的一部分).
但是<hardware/sensor.h>
我发现了许多更有用的传感器的价值,如压力,温度和湿度传感器:
#define SENSOR_TYPE_ACCELEROMETER (1)
#define SENSOR_TYPE_GEOMAGNETIC_FIELD (2)
#define SENSOR_TYPE_ORIENTATION (3)
#define SENSOR_TYPE_GYROSCOPE (4)
#define SENSOR_TYPE_LIGHT (5)
#define SENSOR_TYPE_PRESSURE (6)
#define SENSOR_TYPE_TEMPERATURE (7)
#define SENSOR_TYPE_PROXIMITY (8)
#define SENSOR_TYPE_GRAVITY (9)
#define SENSOR_TYPE_LINEAR_ACCELERATION (10)
#define SENSOR_TYPE_ROTATION_VECTOR (11)
#define SENSOR_TYPE_RELATIVE_HUMIDITY (12)
// ...
#define …
Run Code Online (Sandbox Code Playgroud) 所以我使用HTC EVO获得加速度计数据.我得到这样的价值观.
967454610000 967534902000 967613576000 967692434000
这些值之间的差异大约是80,000,000.文档说:"该值必须是SENSOR_DELAY_NORMAL,SENSOR_DELAY_UI,SENSOR_DELAY_GAME或SENSOR_DELAY_FASTEST之一.或者,事件之间所需的延迟,以微秒为单位."
所以我使用的是SENSOR_DELAY_UI,我认为时间是微秒.这没有意义,因为这意味着每个时间间隔大约是80秒.如果它们以纳秒为单位意味着时间间隔约为0.08秒或每秒捕获12个数据,那将更有意义.但那会与文件相矛盾.有谁知道时间间隔是多少?
非常感谢!
我将如何实现在整个应用程序中运行的线程.我看过服务,但我很确定这不是我想要的.即使应用程序关闭,我也不希望线程不断检查.我只想要一个线程应用程序中(即使我的活动之间切换)的后台运行不间断的检查,看看用户是否提出的电话给他/她的耳朵.如果用户那么它将执行一个动作.有这样的事情的例子吗?