在支持Android Cupcake(1.5)的设备上,如何检查并激活GPS?
在谷歌飞度的应用程序,在安装时,测量你在走路或跑步的时间,也步数所有的时间.然而,奇怪的是,使用它似乎并没有耗尽电池.其他应用程序,如Moves,似乎可以非常准确地记录步数,因为它不断监控GPS和加速度计,因此它会消耗大量功率.
我想象几种可能性:
该应用程序仍然感觉神奇.一直计数步骤而没有可察觉的电池消耗.
我想TextViews在a中显示传感器读数Fragment.当试图初始化SensorManager了getSystemServices在未定义Fragment,日食says.Why以及如何解决它.
分段
public class FragSensors extends Fragment {
private TextView accXTv, accYTv, accZTv;
private SensorManager sensorManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.frag_sensors, container, false);
accXTv = (TextView) v.findViewById(R.id.accXValue);
accYTv = (TextView) v.findViewById(R.id.accYValue);
accZTv = (TextView) v.findViewById(R.id.accZValue);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
private …Run Code Online (Sandbox Code Playgroud) 我正在开发一种蓝牙传感器设备,我需要对其进行一对多的数据广播.根据规范,外设可能只有一个主机,由于我正在设计的芯片和堆栈的限制,主机只能有三个从机.据我所知,Android无论如何都不能成为BLE奴隶,因此将我的设备作为主人不是一种选择.
BT4规范和制造商文档都讨论了另一种操作模式,称为广播模式.在广播模式中,从不进行连接,并且应用数据作为广告包的一部分被发送.这完全符合我的需求,因为许多Android/iOS手机可以同时扫描每个数据包.广告数据包以突发方式多次传输,因此我怀疑数据接收最可靠.如果数据包在此处丢失,则可以容忍.
这有趣的是,我希望这些数据包携带实时传感器数据,以10-20Hz的速率更新.从我在网上找到的例子来看,这种模式下的BLE主要用于"iBeacon"类型的实现,它们在那里广播静态数据.我找不到有关如何在Android堆栈中过滤广告数据包的任何信息.它可能是每个蓝牙硬件地址返回一个结果,或者它可能是地址和数据的唯一组合.第二个选项适用于此应用程序.如果启动和停止扫描重置过滤器,我也可以做一些工作.
Android文档没有提及扫描方法中的设备过滤如何工作.我已经能够在网上找到一个试图解决同样问题的帖子,它有一个未解决的响应:BLE:在扫描期间多次发现相同的外设.在iOS中,我的同事通知我,有一个参数可以传递给扫描功能,使其成为可能.
我试图从Android源代码中的startLeScan()调用回溯代码,但是代码非常复杂,并且使用抽象使得很难识别包含它的对象的实现.我得到的最远的是从BluetoothManagerService类方法getBluetoothGatt()返回的IBluetoothGatt对象.该对象接收开始扫描的请求.它正在当前版本的github上的BluetoothManagerService.java的第790行进行实例化.该对象是从消息的结果转换而来的,所以我怀疑结果可能是电话/驱动程序特定的.能够进一步追踪它是我的专长.
我想解决的另一个问题是如何快速打开和关闭扫描.扫描是一项功耗密集型操作,但数据广播将在相当精确的实时计时器上定期进行.因此,如果可以打开和关闭扫描,这将是一个很好的优化,使得广播和扫描同步,扫描仪关闭其他90%以上的时间.这可能需要通过实验进行测试.
我还在进行可行性研究,看看我们的Android配件是否可行.我现在的手机还没有运行4.3版,所以我无法通过实验测试/黑客攻击.
android android-sensors bluetooth-lowenergy android-bluetooth
Android中的重力和加速度传感器有什么区别?从我的观点来看,两种情况下的物理价值都是相同的.
哪一个测量作用于设备内部单位质量的力?
加成
问题是:这些传感器测量的物理量是多少?根据等效原理,加速度和重力是无法区分的,测量两者的唯一方法是通常(但是3d)弹簧平衡.
Android提供旋转矢量传感器和方向传感器.我知道它们会返回不同的数据,因为对于矢量传感器,我们有角度,在方向传感器中我们有角度.但是概念上的区别是什么?我从文档中无法理解.哪一个提供了三维空间中设备的方向?我糊涂了!
我正在尝试在我的Android手机(Nexus 4)上制作应用程序,该手机将用于模型船.我添加了低通滤波器来滤除传感器的gitter.
但是,当手机背面平放时,指南针才稳定.如果我把它向上倾斜,(例如转动一个嘘声的页面),那么指南针标题就会消失 - 多达50*.
我已经使用Sensor.TYPE_GRAVITY和Sensor.TYPE_ACCELEROMETER对Sensor.TYPE_MAGNETIC_FIELD进行了尝试,效果相同.
我已经使用了这里提到的解决方案以及许多其他地方.我的数学并不好,但这必定是一个常见的问题,我发现没有一个API可以解决这个问题令人沮丧.
我已经在这个问题上工作了3天并且仍然没有找到任何解决方案,但是当我使用Catch的Compass时,无论手机倾斜多少,它们都能保持稳定.所以我知道这一定是可能的.
我想做的就是创建一个指南针,如果手机指向北方,那么指南针将向北读取,而当手机通过任何其他轴(滚动或俯仰)时,指南针不会跳转.
在我不得不放弃我的项目之前,任何人都可以请求帮助.
谢谢,亚当
您好我想使用该类型,type_orientation但它已被弃用为android 4.0.3.我用它来增强现实.我试图在网上找到但没有成功.我的申请有效,但我的文字在同一个地方!这是我的代码:
@Override
protected void onStart() {
super.onStart();
sensorMngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensorLstr = createListener();
sensorMngr.registerListener(sensorLstr, sensorMngr.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_UI);
}
@Override
protected void onStop() {
super.onStop();
sensorMngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensorMngr.unregisterListener(sensorLstr, sensorMngr.getDefaultSensor(Sensor.TYPE_ORIENTATION));
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,我已经看过http://developer.android.com/reference/android/hardware/Sensor.html,但我不明白(我是法国人,我的英语不是很完美...... ) 非常感谢您的帮助!!!
我的应用程序是拨号器,当用户将手机靠近他的头时,我需要关闭屏幕并防止点击控件 - 就像本机Android拨号器行为一样.我需要什么API级别以及如何以正确的方式执行此操作?
我有一个传感器管理器,它rotationMatrix根据设备Magnetometer和Accelerometer 返回一个.我一直试图计算用户设备的偏航俯仰和滚动,但我发现俯仰和滚动相互干扰并给出不准确的结果.有没有办法从rotationMatrix?提取设备的YAW PITCH和ROLL ?
编辑 试着解释下面的blender的答案,我感谢但还没到那里,我试图从这样的旋转矩阵中获得角度:
float R[] = phoneOri.getMatrix();
double rmYaw = Math.atan2(R[4], R[0]);
double rmPitch = Math.acos(-R[8]);
double rmRoll = Math.atan2(R[9], R[10]);
Run Code Online (Sandbox Code Playgroud)
我不知道我是否引用矩阵的错误部分,但我没有得到我想的结果.
我希望得到度数的价值,但我得到奇怪的整数.
我的矩阵来自我的sensorManager看起来像这样:
public void onSensorChanged(SensorEvent evt) {
int type=evt.sensor.getType();
if(type == Sensor.TYPE_ORIENTATION){
yaw = evt.values[0];
pitch = evt.values[1];
roll = evt.values[2];
}
if (type == Sensor.TYPE_MAGNETIC_FIELD) {
orientation[0]=(orientation[0]*1+evt.values[0])*0.5f;
orientation[1]=(orientation[1]*1+evt.values[1])*0.5f;
orientation[2]=(orientation[2]*1+evt.values[2])*0.5f;
} else if (type == Sensor.TYPE_ACCELEROMETER) {
acceleration[0]=(acceleration[0]*2+evt.values[0])*0.33334f;
acceleration[1]=(acceleration[1]*2+evt.values[1])*0.33334f;
acceleration[2]=(acceleration[2]*2+evt.values[2])*0.33334f;
}
if ((type==Sensor.TYPE_MAGNETIC_FIELD) || (type==Sensor.TYPE_ACCELEROMETER)) {
float newMat[]=new float[16]; …Run Code Online (Sandbox Code Playgroud)