Download presentation
Presentation is loading. Please wait.
Published byNorma Knight Modified over 9 years ago
1
Android vs. JavaScript 建國科技大學資管系 饒瑞佶 2013/5
2
JavaScript call Java By JavascriptInterface 將 native code 寫在 JavascriptInterface 內,例 如取得方位的程式 透過 WebView 來串接 JavascriptInterface 與 JavaScript JavaScript 端透過 window.interface 名稱. 函數 來呼叫程式
3
建立 class JsInterface public class JsInterface { Context mcontext; public JsInterface(Context c){ mcontext=c; } //Javascript call JAVA public void getSomeString(){ Toast.makeText(mcontext, " 呼叫 JAVA 成功 ", Toast.LENGTH_LONG).show(); } // JAVA call Javascript public String setValFromJava(){ return " 資料從 JAVA 設定到 HTML 端 "; }
4
呼叫 class JsInterface public class Main extends Activity { WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mWebView=new WebView(this); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new JsInterface(this), "myjsinterface"); mWebView.loadUrl("file:///android_asset/www/index.html"); setContentView(mWebView); }
5
建立 index.html PhoneGap $(document).ready(function(){ $('#calljava').click(function(){ window.myjsinterface.getSomeString(); }); $('#sethtml').click(function(){ $('#showval').html(window.myjsinterface.setValFromJava()); }); Android JAVA vs. Javascript 2013/5/20
6
製作硬體呼叫 jar 檔
7
class compassjar public class compassjar { private SensorManager sm=null; // Sensor Manager private Sensor aSensor;// 加速度計 private Sensor mSensor;// 磁方位 float[] accelerometerValues=new float[3]; // 加速度計值 float[] magneticFieldValues=new float[3];// 磁方位值 float[] rotate=new float[16]; // 原始值 float[] outrotate=new float[16]; float[] values=new float[3]; private compassjar.Callback cb=null; // constructor public compassjar(Context context, compassjar.Callback cb) { this.cb=cb; // 返回呼叫 sm = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE); aSensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mSensor=sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); sm.registerListener(myListener, aSensor, SensorManager.SENSOR_DELAY_UI); sm.registerListener(myListener, mSensor, SensorManager.SENSOR_DELAY_UI); }
8
// sensor 關閉 public void close() { sm.unregisterListener(myListener); } private void outxyz(float x,float y,float z) { if (cb!=null) { cb.getxyz(x,y,z); } public interface Callback { void getxyz(float x,float y,float z); }
9
private SensorEventListener myListener=new SensorEventListener() { public void onSensorChanged(SensorEvent e) { if(e.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ accelerometerValues=e.values; } if(e.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){ magneticFieldValues=e.values; } // 取得方位角 SensorManager.getRotationMatrix(rotate, null, accelerometerValues, magneticFieldValues); SensorManager.remapCoordinateSystem(rotate,SensorManager.AXIS_Z,SensorManager.A XIS_MINUS_X, outrotate); SensorManager.getOrientation(outrotate, values); // 轉換成度 180~-180 values[0]=(float)Math.toDegrees(values[0]); //x values[1]=(float)Math.toDegrees(values[1]); //y values[2]=(float)Math.toDegrees(values[2]); //z // 輸出 outxyz(values[0],values[1],values[2]); } public void onAccuracyChanged(Sensor sensor, int accuracy) { // unused } }; }
10
輸出 jar 檔
12
使用 jar 檔 首先匯入 jar 檔 public class CallCompassJar extends Activity implements compassjar.Callback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void getxyz(float arg0, float arg1, float arg2) { // TODO 自動產生的方法 Stub }
13
public class CallCompassJar extends Activity implements compassjar.Callback { private compassjar shaker=null; // 建立 compassjar TextView tv; // 顯示資料 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 這裡來自於 jar shaker=new compassjar(this, this); tv=(TextView)findViewById(R.id.textview1); } @Override public void getxyz(float arg0, float arg1, float arg2) { // 呼叫 jar tv.setText("X=" + arg0 + "\n Y=" + arg1 + "\n Y=" + arg2); }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.