溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

PhoneGap for Android平臺(tái)源碼的示例分析

發(fā)布時(shí)間:2021-11-26 09:14:23 來(lái)源:億速云 閱讀:96 作者:柒染 欄目:移動(dòng)開(kāi)發(fā)

今天就跟大家聊聊有關(guān)PhoneGap for Android平臺(tái)源碼的示例分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

PhoneGap內(nèi)部數(shù)據(jù)傳遞使用了JSON,比如PhoneGap中指南針部分源碼如下:

public class CompassListener extends Plugin implements SensorEventListener {   public static int STOPPED = 0;  public static int STARTING = 1;     public static int RUNNING = 2;     public static int ERROR_FAILED_TO_START = 3;         public long TIMEOUT = 30000;  // Timeout in msec to shut off listener       int status;       // status of listener     float heading;      // most recent heading value     long timeStamp;      // time of most recent value     long lastAccessTime;    // time the value was last retrieved       private SensorManager sensorManager;// Sensor manager     Sensor mSensor;      // Compass sensor returned by sensor manager    /**   * Constructor.   */  public CompassListener() {         this.timeStamp = 0;         this.setStatus(CompassListener.STOPPED);  }   /**   * Sets the context of the Command. This can then be used to do things like   * get file paths associated with the Activity.   *   * @param ctx The context of the main Activity.   */  public void setContext(PhonegapActivity ctx) {   super.setContext(ctx);         this.sensorManager = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE);  }   /**   * Executes the request and returns PluginResult.   *   * @param action   The action to execute.   * @param args    JSONArry of arguments for the plugin.   * @param callbackId The callback id used when calling back into JavaScript.   * @return     A PluginResult object with a status and message.   */  public PluginResult execute(String action, JSONArray args, String callbackId) {   PluginResult.Status status = PluginResult.Status.OK;   String result = "";        try {    if (action.equals("start")) {     this.start();    }    else if (action.equals("stop")) {     this.stop();    }    else if (action.equals("getStatus")) {     int i = this.getStatus();     return new PluginResult(status, i);    }    else if (action.equals("getHeading")) {     // If not running, then this is an async call, so don't worry about waiting     if (this.status != RUNNING) {      int r = this.start();      if (r == ERROR_FAILED_TO_START) {       return new PluginResult(PluginResult.Status.IO_EXCEPTION, ERROR_FAILED_TO_START);      }      // Wait until running      long timeout = 2000;      while ((this.status == STARTING) && (timeout > 0)) {       timeouttimeout = timeout - 100;       try {        Thread.sleep(100);       } catch (InterruptedException e) {        e.printStackTrace();       }      }      if (timeout == 0) {       return new PluginResult(PluginResult.Status.IO_EXCEPTION, AccelListener.ERROR_FAILED_TO_START);            }     }     float f = this.getHeading();     return new PluginResult(status, f);    }    else if (action.equals("setTimeout")) {     this.setTimeout(args.getLong(0));    }    else if (action.equals("getTimeout")) {     long l = this.getTimeout();     return new PluginResult(status, l);    }    return new PluginResult(status, result);   } catch (JSONException e) {    e.printStackTrace();    return new PluginResult(PluginResult.Status.JSON_EXCEPTION);   }  }   /**   * Identifies if action to be executed returns a value and should be run synchronously.   *   * @param action The action to execute   * @return   T=returns value   */  public boolean isSynch(String action) {   if (action.equals("getStatus")) {    return true;   }   else if (action.equals("getHeading")) {    // Can only return value if RUNNING    if (this.status == RUNNING) {     return true;    }   }   else if (action.equals("getTimeout")) {    return true;   }   return false;  }         /**      * Called when listener is to be shut down and object is being destroyed.      */  public void onDestroy() {   this.stop();  }      //--------------------------------------------------------------------------     // LOCAL METHODS     //--------------------------------------------------------------------------      /**      * Start listening for compass sensor.      *      * @return    status of listener      */  public int start() {      // If already starting or running, then just return         if ((this.status == CompassListener.RUNNING) || (this.status == CompassListener.STARTING)) {          return this.status;         }    // Get accelerometer from sensor manager   List<Sensor> list = this.sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);          // If found, then register as listener   if (list.size() > 0) {    this.mSensor = list.get(0);    this.sensorManager.registerListener(this, this.mSensor, SensorManager.SENSOR_DELAY_NORMAL);             this.lastAccessTime = System.currentTimeMillis();             this.setStatus(CompassListener.STARTING);   }    // If error, then set status to error         else {             this.setStatus(CompassListener.ERROR_FAILED_TO_START);         }                 return this.status;  }       /**      * Stop listening to compass sensor.      */  public void stop() {         if (this.status != CompassListener.STOPPED) {          this.sensorManager.unregisterListener(this);         }         this.setStatus(CompassListener.STOPPED);  }      public void onAccuracyChanged(Sensor sensor, int accuracy) {   // TODO Auto-generated method stub   }      /**      * Sensor listener event.      *      * @param SensorEvent event      */  public void onSensorChanged(SensorEvent event) {    // We only care about the orientation as far as it refers to Magnetic North   float heading = event.values[0];    // Save heading         this.timeStamp = System.currentTimeMillis();   this.heading = heading;   this.setStatus(CompassListener.RUNNING);    // If heading hasn't been read for TIMEOUT time, then turn off compass sensor to save power   if ((this.timeStamp - this.lastAccessTime) > this.TIMEOUT) {    this.stop();   }  }       /**      * Get status of compass sensor.      *      * @return   status      */  public int getStatus() {   return this.status;  }    /**   * Get the most recent compass heading.   *   * @return   heading   */  public float getHeading() {         this.lastAccessTime = System.currentTimeMillis();   return this.heading;  }    /**   * Set the timeout to turn off compass sensor if getHeading() hasn't been called.   *   * @param timeout  Timeout in msec.   */  public void setTimeout(long timeout) {   this.TIMEOUT = timeout;  }    /**   * Get the timeout to turn off compass sensor if getHeading() hasn't been called.   *   * @return timeout in msec   */  public long getTimeout() {   return this.TIMEOUT;  }   /**   * Set the status and send it to JavaScript.   * @param status   */  private void setStatus(int status) {   this.status = status;  }  }

看完上述內(nèi)容,你們對(duì)PhoneGap for Android平臺(tái)源碼的示例分析有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI