編輯:Android開發教程
1.android 的坐標系是如何定義x, y z 軸的。
x軸的方向是沿著屏幕的水平方向從左向右,如果手 機不是正方形的話,較短的邊需要水平放置,較長的邊需要垂直放置。
Y軸的方向是從屏幕的左下角開 始沿著屏幕的的垂直方向指向屏幕的頂端。
將手機放在桌子上,z軸的方向是從手機指向天空。
2.方向傳感器
在方向傳感器中values變量的3個值都表 示度數,它們的含義如下:
values[0]:該值表示方位,也就是 手機繞著Z軸旋轉的角度。0表示北(North);90表示東(East);180表示南(South);270表示西(West) 。如果values[0]的值正好是這4個值,並且手機是水平放置,表示手機的正前方就是這4個方向。可以利用這 個特性來實現電子羅盤,實例76將詳細介紹電子羅盤的實現過程。
values[1]: 該值表示傾斜度,或手機翹起的程度。當手機繞著X軸傾斜時該值發生變化。values[1]的取值范圍是-180≤ values[1]≤180。
假設將手機屏幕朝上水平放在桌子上,這時如果桌子是完全水平的,values[1]的值 應該是0(由於很少有桌子是絕對水平的,因此,該值很可能不為0,但一般都是-5和5之間的某個值)。這時 從手機頂部開始抬起,直到將手機沿X軸旋轉180度(屏幕向下水平放在桌面上)。在這個旋轉過程中, values[1]會在0到-180之間變化,也就是說,從手機頂部抬起時,values[1]的值會逐漸變小,直到等於-180 。如果從手機底部開始抬起,直到將手機沿X軸旋轉180度,這時values[1]會在0到180之間變化。也就是 values[1]的值會逐漸增大,直到等於180。可以利用values[1]和下面要介紹的values[2]來測量桌子等物體的 傾斜度。
values[2]:表示手機沿著Y軸的滾動角度。取值范圍 是-90≤values[2]≤90。假設將手機屏幕朝上水平放在桌面上,這時如果桌面是平的,values[2]的值應為0。 將手機左側逐漸抬起時,values[2]的值逐漸變小,直到手機垂直於桌面放置,這時values[2]的值是-90。將 手機右側逐漸抬起時,values[2]的值逐漸增大,直到手機垂直於桌面放置,這時values[2]的值是90。在垂直 位置時繼續向右或向左滾動,values[2]的值會繼續在-90至90之間變化。
下面以一個實例說明其應用 方法
package com.example.sensortest; import java.util.List; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class SensorTest extends Activity implements SensorEventListener{ private SensorManager sensorManager = null; private Sensor gyroSensor = null; private TextView vX; private TextView vY; private TextView vZ; private TextView v; private Button button; private static final float NS2S = 1.0f / 1000000000.0f; private float timestamp; private float[] angle = new float[3]; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sensor_test); vX = (TextView) findViewById(R.id.vx); vY = (TextView)findViewById(R.id.vy); vZ = (TextView)findViewById(R.id.vz); v = (TextView)findViewById(R.id.v); button = (Button)findViewById(R.id.button); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); gyroSensor = sensorManager .getDefaultSensor(Sensor.TYPE_ORIENTATION); vX.setText("!!!!!!"); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub //聲明可變字符串 StringBuffer sb = new StringBuffer(); //獲取手機全部的傳感器 List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); //迭代輸出獲得上的傳感器 for (Sensor sensor : sensors) { //System.out.println(sensor.getName().toString()); sb.append(sensor.getName().toString()); sb.append("\n"); Log.i("Sensor", sensor.getName().toString()); } //給文本控件賦值 v.setText(sb.toString()); } }); } public SensorTest() { // TODO Auto-generated constructor stub angle[0] = 0; angle[1] = 0; angle[2] = 0; timestamp = 0; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_sensor_test, menu); return true; } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); sensorManager.unregisterListener(this); // 解除監聽器注冊 } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); sensorManager.registerListener(this, gyroSensor, SensorManager.SENSOR_DELAY_NORMAL); //為傳感器注冊監聽器 } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } @Override public void onSensorChanged(SensorEvent event) { // TODO Auto-generated method stub // if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) // { // return; // } // if (timestamp != 0) { // final float dT = (event.timestamp - timestamp) * NS2S; // angle[0] += event.values[0] * dT * 100; // angle[1] += event.values[1] * dT * 100; // angle[2] += event.values[2] * dT * 100; // } // timestamp = event.timestamp; // // // vX.setText("X: " + Float.toString(angle[0])); // vY.setText("Y: " + Float.toString(angle[1])); // vZ.setText("Z: " + Float.toString(angle[2])); // 方向傳感器提供三個數據,分別為azimuth、pitch和roll。 // // azimuth:方位,返回水平時磁北極和Y軸的夾角,范圍為0°至360°。 // 0°=北,90°=東,180°=南,270°=西。 // // pitch:x軸和水平面的夾角,范圍為-180°至180°。 // 當z軸向y軸轉動時,角度為正值。 // // roll:y軸和水平面的夾角,由於歷史原因,范圍為-90°至90°。 // 當x軸向z軸移動時,角度為正值。 vX.setText("Orientation X: " + event.values[0]); vY.setText("Orientation Y: " + event.values[1]); vZ.setText("Orientation Z: " + event.values[2]); } }
package net.gimite.nativeexe; import java.io.BufferedReader; import java.io.F
把apktool-install-windows-r05-ibot文件裡的兩個文件剪切到apktool1.5.1目錄。新建一個文件夾把需要破解的apk應用程序放進去。在此
創建好ApiDemo項目後,就可以逐個示例的來分析代碼,這裡假定讀者已對Android開發有些了解或是讀過Android簡明開發教 程。首先是看ApiDemo的主Acti
新的系統保留了原來Jelly Bean 名字,整體用戶體驗並沒有太大的改動,不過一些新的功能還是值得大家關注的。Google Now 更新在新的Google Now 中,