Android

个人Android学习总结


Gsensor_方向感应实现

<h1>Gsensor_指南针实现</h1> <p>SensorManager .getDefaultSensor(Sensor.TYPE_ORIENTATION); 这个方法其实是已经被Android抛弃的方法,用下面两个来代替实现 //<a href="http://blog.csdn.net/genius9_9/article/details/44035955">http://blog.csdn.net/genius9_9/article/details/44035955</a> 参考文章</p> <pre><code>public class MainActivity extends Activity { private static final String TAG = &amp;quot;gsen&amp;quot;; ImageView imgView; SensorManager manager; private float targetDegree =0.0f; private float[] mMageneticValues = new float[3]; private float[] mAcceleValues = new float[3]; private TextView azimuthAngle; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgView = (ImageView) findViewById(R.id.img); azimuthAngle = (TextView) findViewById(R.id.azimuth_angle_value) ; imgView.setKeepScreenOn(true); manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); } @Override protected void onResume() { //SensorManager .getDefaultSensor(Sensor.TYPE_ORIENTATION); 这个方法其实是已经被Android抛弃的方法,用下面两个来代替实现 //http://blog.csdn.net/genius9_9/article/details/44035955 参考文章 Sensor mAcceleSensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); // 加速度传感器 :Sensor.TYPE_ACCELEROMETER Sensor mMagneticSensor = manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); //磁场强度传感器:Sensor.TYPE_MAGNETIC_FIELD manager.registerListener(mOrientationSensorEventListener, mAcceleSensor, SensorManager.SENSOR_DELAY_NORMAL); manager.registerListener(mOrientationSensorEventListener, mMagneticSensor, SensorManager.SENSOR_DELAY_NORMAL); List&amp;lt;Sensor&amp;gt; deviceSensors = manager.getSensorList(Sensor.TYPE_ALL); for (int i = 0; i &amp;lt; deviceSensors.size(); i++) { Log.d(&amp;quot;gsen&amp;quot;, &amp;quot; deviceSensors = &amp;quot;+ deviceSensors.get(i).getName()) ; } super.onResume(); } SensorEventListener mOrientationSensorEventListener = new SensorEventListener() { private float predegree = 0; public void onSensorChanged(SensorEvent event) { int sensorType = event.sensor.getType(); Log.d(TAG,&amp;quot; onSensorChanged() sensorType = &amp;quot;+sensorType); if(sensorType == Sensor.TYPE_ACCELEROMETER){ //加速度传感器 mAcceleValues = event.values; } if(sensorType == Sensor.TYPE_MAGNETIC_FIELD){ // 磁场强度传感器 mMageneticValues = event.values; } calculateOrientation(); /*******************************test**********************************/ /* float degree = event.values[0];// 数组中的第一个数是方向值 RotateAnimation anim = new RotateAnimation(predegree, -degree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); anim.setDuration(200); // imgView.setAnimation(anim);//这句错误 imgView.startAnimation(anim); predegree = -degree;//记录这一次的起始角度作为下次旋转的初始角度 Log.d(&amp;quot;gsen&amp;quot;, &amp;quot;predegree = &amp;quot;+ predegree) ;*/ /** float x=event.values[SensorManager.DATA_X]; float y=event.values[SensorManager.DATA_Y]; float z=event.values[SensorManager.DATA_Z]; Log.i(&amp;quot;XYZ&amp;quot;, &amp;quot;x=&amp;quot;+(int)x+&amp;quot;,y=&amp;quot;+(int)y+&amp;quot;,z=&amp;quot;+(int)z); */ } public void onAccuracyChanged(Sensor sensor, int accuracy) { Log.d(TAG,&amp;quot; onAccuracyChanged()&amp;quot;); } }; @Override protected void onPause() { super.onPause(); manager.unregisterListener(mOrientationSensorEventListener); } // 计算方向 private void calculateOrientation() { float[] values = new float[3]; float[] R = new float[9]; manager.getRotationMatrix(R, null, mAcceleValues, mMageneticValues); manager.getOrientation(R, values); values[0] = (float) Math.toDegrees(values[0]); targetDegree = (-values[0]+360.0f) % 360; Log.d(TAG,&amp;quot; mAcceleValues[0]=&amp;quot;+mAcceleValues[0] +&amp;quot;, mMageneticValues[0] ==&amp;quot; +mMageneticValues[0] ); Log.d(TAG,&amp;quot; calculateOrientation() values[0]=&amp;quot;+values[0] ); if (values[0] &amp;gt;= -5 &amp;amp;&amp;amp; values[0] &amp;lt; 5) { azimuthAngle.setText(&amp;quot;正北&amp;quot;); } else if (values[0] &amp;gt;= 5 &amp;amp;&amp;amp; values[0] &amp;lt; 85) { // Log.i(TAG, &amp;quot;东北&amp;quot;); azimuthAngle.setText(&amp;quot;东北&amp;quot;); } else if (values[0] &amp;gt;= 85 &amp;amp;&amp;amp; values[0] &amp;lt;= 95) { // Log.i(TAG, &amp;quot;正东&amp;quot;); azimuthAngle.setText(&amp;quot;正东&amp;quot;); } else if (values[0] &amp;gt;= 95 &amp;amp;&amp;amp; values[0] &amp;lt; 175) { // Log.i(TAG, &amp;quot;东南&amp;quot;); azimuthAngle.setText(&amp;quot;东南&amp;quot;); } else if ((values[0] &amp;gt;= 175 &amp;amp;&amp;amp; values[0] &amp;lt;= 180) || (values[0]) &amp;gt;= -180 &amp;amp;&amp;amp; values[0] &amp;lt; -175) { // Log.i(TAG, &amp;quot;正南&amp;quot;); azimuthAngle.setText(&amp;quot;正南&amp;quot;); } else if (values[0] &amp;gt;= -175 &amp;amp;&amp;amp; values[0] &amp;lt; -95) { // Log.i(TAG, &amp;quot;西南&amp;quot;); azimuthAngle.setText(&amp;quot;西南&amp;quot;); } else if (values[0] &amp;gt;= -95 &amp;amp;&amp;amp; values[0] &amp;lt; -85) { // Log.i(TAG, &amp;quot;正西&amp;quot;); azimuthAngle.setText(&amp;quot;正西&amp;quot;); } else if (values[0] &amp;gt;= -85 &amp;amp;&amp;amp; values[0] &amp;lt; -5) { // Log.i(TAG, &amp;quot;西北&amp;quot;); azimuthAngle.setText(&amp;quot;西北&amp;quot;); } } } &amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot; android:layout_width=&amp;quot;fill_parent&amp;quot; android:layout_height=&amp;quot;fill_parent&amp;quot; android:orientation=&amp;quot;vertical&amp;quot; android:background=&amp;quot;@android:color/white&amp;quot; android:gravity=&amp;quot;center&amp;quot; &amp;gt; &amp;lt;ImageView android:id=&amp;quot;@+id/img&amp;quot; android:layout_width=&amp;quot;wrap_content&amp;quot; android:layout_height=&amp;quot;wrap_content&amp;quot; android:src=&amp;quot;@drawable/sensorimg&amp;quot;/&amp;gt; &amp;lt;TextView android:layout_width=&amp;quot;match_parent&amp;quot; android:layout_height=&amp;quot;wrap_content&amp;quot; android:textSize=&amp;quot;20sp&amp;quot; android:textColor=&amp;quot;#00aadd&amp;quot; android:gravity=&amp;quot;center&amp;quot; android:id=&amp;quot;@+id/azimuth_angle_value&amp;quot;/&amp;gt; &amp;lt;/LinearLayout&amp;gt;</code></pre>

页面列表

ITEM_HTML