顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

2013年10月30日 星期三

終於可以在Android平板上寫Scratch 2.0小貓咪程式了



帥吧!!!Scratch 2.0在Android平板上跑起來還蠻順暢的,Jimmy's papa終於可以擺脫掉卡卡的Squeak/Pharo版本



切換平板畫面為垂直方向,便能看到畫面下方的造型區,可以新增或點選造型



用點小技巧,也可以全螢幕顯示



這是實機照,Scratch 2.0在10吋的平板上,字體有點小看起來很吃力,幸好積木還可以隨意放大縮小

2013年10月2日 星期三

安裝 Processing for Android

1.先到Android Developer官網下載SDK工具包,解壓縮後執行/tools/android

2.再到Processing官網下載Processing,覺得好用的話,下次下載時可考慮捐點錢

3.解壓縮後,執行./processing,此時只支援標準的Java mode

4.在Mode Manager裡,選擇Install Android Mode

5.順利的話,幾分鐘就可安裝完畢

6.回到主畫面,準備切換到Android mode

7.在Linux,Processing可能會找不到Android SDK,會詢問是否手動加入Android SDK路徑

8.選擇開頭下載SDK工具包,解壓縮後的檔案路徑

2012年6月8日 星期五

MINDdroid 1.3

其實Jimmy's papa有點孤陋寡聞,直到最近才知道於2010年老早就有MINDdroid這個東東,可在Android上操控NXT機器人,原本還打算以Android NDK打包C/C++ Library的方式,不過既然有了MINDdroid這套java函式庫,拿來開發Android App就直接了當多了也比較容易除錯

Jimmy's papa想看看有無法子整合到Scratch或Waterbear,不過整合到Scratch應該會比較麻煩,因為還要懂得squeakvm-tablet的FFI寫法

MINDSTORMS官網介紹MINDdroid 1.3
GitHub下載

2012年3月29日 星期四

Waterbear On Android

Waterbear(水熊蟲)程式工具,Jimmy's papa終於將它移植到Android平板上,花那麼多力氣移植,只因為我用Android平板上Waterbear官網,卻無法享受在官網上拖動程式積木的樂趣,改裝期間最大的收穫,大概是搞懂了JQuery吧

這個版本還有許多缺陷,但是基本上
1.支援觸控拖拉積木
2.支援中文切換

不過切記執行此版本時請勿按HOME鍵,否則積木會憑空消失,原因我還在找....
從Android平板按這裡下載AndroidWaterbearWebView.apk
寄件者 scratchlab01

2012年2月14日 星期二

Qt for Android

Qt是一個跨平台的C++應用程式開發框架。廣泛用於開發GUI程式,現在Android平台上也能以Qt開發APP,原先在Linux/Mac/Windowsg上利用Qt開發的程式據說可以快速移植到Android,而不需要修改原始碼,底下是Jimmy's papa安裝的步驟

安裝Necessitas Qt Creator
最簡單的方式,就是到以下連結下載安裝程式,執行安裝時根據你的需求勾取選項,然後就是等.......
http://sourceforge.net/projects/necessitas/files/

啟動Necessitas Qt Creator
Jimmy's papa選擇Mandelbrot碎形當範例,並將Desktop及Android選項都勾起來
寄件者 scratchlab01

這是Jimmy's papa在PC上執行的結果
寄件者 scratchlab01


要安裝自己的Qt APP程式之前,別急,得先安裝這兩個apk(Ministro II.apk,MinistroConfigurationTool II.apk),請到以下連結安裝
http://sourceforge.net/projects/ministro.necessitas.p/files/

要啟動你的Qt APP程式之前,它會要求下載一些必要的共享函式庫,如果幸運地網路沒塞車的話,很快就好啦,否則就是等.......

這是安裝好的Qt APP
寄件者 scratchlab01

一些相關的教學影片
http://blip.tv/bogdan-vatra

2012年1月4日 星期三

Install scat (Scratch) to Android Tablet(XOOM)--簡易安裝Scratch到Android平板

今天Jimmy's papa將XOOM成功的升級到Android 3.2版本,雖然沒看到什麼讓人驚豔的功能,但很高興我的XOOM沒有成為棄嬰,希望MOTO給我努力用力的升級下去,因為Jimmy's papa很想吃到Ice Cream啊!!!

Jimmy's papa也趁便測試一下是否不需要PC,直接在Android安裝scat(Scratch)及CogDroid,安裝流程如下,希望大家看得懂我的poor english,haha!!!

1.Open Web Browser in Android
啟動平板電源,並且打開Android Browser

2. Download CogDroidVM APP
http://code.google.com/p/squeakvm-tablet/downloads/list
downloadCogDroid.apk

3. Install CogDroid.apk
Open Files Manager on your Android Tablet.
Find /Download/CogDroid.apk in Internal Storage and install it.

4. Download http://jimmyscratchlab.googlecode.com/files/scat.zip

5.Unzip scat.zip
Open Files Manager and unzip /Download/scat.zip,
you will get 3 file(scat.image , scat.changes , PharoV10.sources).

5. Create /Presentation directory
Open Files Manager and create /Presentation in Internal Storage

6.Copy scat.image
Open Files Manager and copy 3 file(scat.image , scat.changes , PharoV10.sources) to /Presentation

7. Open CogDroid App

8. Select scat.image in CogDroid's Files List

9.Enjoy scat(Scratch)!!!
Don't worry 'PrimitiveFailed' warning,just click 'Abandon' Button.

2011年12月16日 星期五

Catroid--用Android操控NXT機器人除了App Inventor的另一選擇

Catroid是一套類似Scratch的積木式程式碼開發工具的Android APP,之前Jimmy's papa曾下載Catroid到我的Android平板小玩一下,那時覺得它的功能跟Scratch對照之下實在非常陽春,不過最近釋出的版本讓Jimmy's papa眼鏡一亮,想不到已經進化到能支援藍牙操控NXT機器人了,改天安裝到我的XOOM平板讓我兒子Jimmy玩玩看

Catroid官網
http://www.catroid.org/catroid/index
Catroid專案
http://code.google.com/p/catroid/

2011年12月6日 星期二

安裝scat(Scratch)到Android平板

以下是Jimmy's papa整理出來的安裝步驟,由於我的工作環境大多在linux上,Windows的使用者可能要稍微注意不同處,而且提供的檔案連結可能因為新版本而失效,可能要麻煩各位網友到原始下載頁面點選下載 ,倉促之間寫成有任何問題歡迎告訴Jimmy's papa

下載scratch image
為了簡化程序,Jimmy's papa將image相關檔案整理好了
下載scat.zip
將scat.zip解壓縮
內含scat.image , scat.changes , PharoV10.sources 三個檔
寄件者 scratchlab01


CogDroid VM APP
http://code.google.com/p/squeakvm-tablet/downloads/list
下載CogDroid-alpha-20111009.apk

安裝Android SDK
再到http://developer.android.com/sdk/index.html下載Android SDK(依你的OS擇一),並解壓縮
http://dl.google.com/android/android-sdk_r15-windows.zip
http://dl.google.com/android/installer_r15-windows.exe
http://dl.google.com/android/android-sdk_r15-linux.tgz

安裝SDK其他元件
# On Windows, double-click the SDK Manager.exe file at the root of the Android SDK directory.
Windows使用者請以滑鼠點擊SDK Manager.exe
# On Mac or Linux, open a terminal and navigate to the tools/ directory in the Android SDK, then execute: android
寄件者 scratchlab01

Linux則須開啟終端機命令列視窗,執行
cd /tools
執行
./android
寄件者 scratchlab01
執行完成後,會發現多了好幾個目錄,其中的/platform-tools目錄裡,有我們要的adb(Android Debug Bridge)這隻程式
寄件者 scratchlab01
準備傳輸檔案及APP到Android平板
將先前四個檔案scat.image , scat.changes , PharoV10.sources , CogDroid-alpha-20111009.apk
複製到/(你安裝的目錄)/android-sdk-linux_x86/platform-tools
將你的平板的資料傳輸線,插入PC及平板的USB插槽
在你的終端機命令列視窗執行
cd ~/(你安裝的目錄)/android-sdk-linux_x86/platform-tools$

./adb push scat.image /sdcard/Presentation/scat.image 

./adb push scat.changes /sdcard/Presentation/scat.changes 

./adb push PharoV10.sources /sdcard/Presentation/PharoV10.sources 

./adb push install CogDroid-alpha-20111009.apk

按一下平板的CogDroid圖示,會出現以下畫面
寄件者 scratchlab01

若出現PrimitiveFailed警告視窗,沒關係,按下Abandon按鈕就對了

2011年11月8日 星期二

libGDX 一套很棒的Android遊戲開發框架

libGDX是一套很棒的遊戲開發框架,它能很方便的讓Android遊戲開發者先在PC桌面開發測試,然後再進一步轉移成Android App,Jimmy's papa覺得libGDX是一套值得好好研究Android framework,雖然它的說明文件不是很詳盡,但是照著教學影片一步一步來,馬上就能執行桌機版及Android版的陽春程式,不過它提供的測試範例程式倒是不少,足夠讓Jimmy's papa快速地進入狀況

在Google Code的libGDX專案
http://code.google.com/p/libgdx/
官網
http://libgdx.badlogicgames.com/
部落格
http://www.badlogicgames.com/wordpress/
論壇
http://www.badlogicgames.com/forum/viewforum.php?f=11
相關小工具
http://www.aurelienribon.com/blog/

2011年10月17日 星期一

如何在CogDroid上執行Pharo的DoIt功能

Jimmy's papa在平板上玩Smalltalk有個困擾,因為沒有滑鼠鍵或鍵盤Ctrl or Alt,讓我執行DoIt功能,不過後來Jimmy's papa找到變通的方式

首先在Linux啟動Pharo,打開Workspace然後在任意空白處按滑鼠右鍵會跳出選單,然後將鼠標滑至"DoIt"按滑鼠中鍵,會出現下圖,請選"Pick up"

寄件者 scratchlab01

可將"Do it"拉到Pharo主畫面任意處,按"Do it"便可執行Worlspace上的指令

寄件者 scratchlab01

可將以上的Pharo.image存起來,Push到Android-tablet的/Presentation目錄

寄件者 scratchlab01

2011年10月4日 星期二

ROS(Robot Operating System) on Android

以下是jimmy's papa整理的相關資料連結,如果能深入研究的話 對機器人操作平台基礎架構會有一定的概念,Jimmy's papa已經安裝好SL4A(Scripting Layer for Android)在平板上,改天再找時間研究看看如何安裝ROS

ROS的介紹
http://www.ros.org/wiki/ROS/Introduction

VMI Android Mobile Main Package
http://www.ros.org/wiki/android

rosjava
http://code.google.com/p/rosjava/
http://www.ros.org/wiki/rosjava

Get ROS running on Android
https://vmi.lmt.ei.tum.de/svn/vmi-ros-pkg/trunk/vmi_android/android/README

Android running ROScore
https://vmi.lmt.ei.tum.de/projects/ros/wiki/Androidinstall

Using Lego NXT with ROS
http://www.ros.org/wiki/Robots/NXT
http://www.ros.org/wiki/nxt/Installation

2011年9月15日 星期四

終於可以在Android平板上寫Scratch小貓咪程式了

Jimmy's papa參考了scatsqueakvm-tablet兩個專案,經過一番努力後,終於將兩者成功安裝到我的XOOM平板電腦,實在非常感謝兩個專案的開發人員的努力奉獻,讓Jimmy's papa也可以在Android平板上寫Scratch小貓咪程式!!!

ps.現在Sratch 2.0也可以囉!!!


安裝過程請參考這裡
寄件者 scratchlab

2011年9月11日 星期日

Android + Pharo + CogVM

上回安裝安裝squeakvm-tablet在XOOM Android平板之後,最近作者又釋出了CogVM(CogDroid)版本CogDroid-alpha-20110903.apk,Jimmy's papa安裝上去後並且載入Pharo,參考Pharo-the collaborActive book寫了個CreateWindow範例測試看看,嗯!漂亮,不過有個缺點是,找不到方法在Workspace視窗以do it(d)執行,只好先以TestRunner先頂著跑跑看

以下是Smalltalk程式碼及畫面

window := StandardWindow labelled: 'Painter'.

chooser := ColorChooserMorph new.
window addMorph: chooser.

window openInWorld.
寄件者 scratchlab

2011年9月10日 星期六

Android Realtime Line Chart Demo

下面這段影片顯示氣壓計(Barometer)的即時動態折線圖,網路上一直找不到現成的realtime圖表函數庫,Jimmy's papa只好動手修修改改別人的範例,花了許久的時間才做到能夠即時更新線圖畫面

2011年9月7日 星期三

原來Java List類別是Hold住哥

最近Jimmy's papa被List類別搞得快變成卡卡先生,進度一直卡卡卡,原本Jimmy's papa想為android寫個即時動態折線圖(realtime Line Chart),可是事與願違,折線圖永遠只顯示最初的十筆資料,後來發現,原來搗蛋的是List這個Hold住哥

以下是部份程式碼

//dataArraylist存放每條折線的所有資料點的x及y值
private ArrayList<GraphViewData> dataArraylist = new ArrayList<GraphViewData>();
//lineGraphSeries可存放多條折線
private  List<LineGraphViewSeries> lineGraphSeries;

//將dataArraylist塞入exampleSeries
exampleSeries = new GraphViewSeries(dataArraylist);
lineGraphView.addSeries(exampleSeries);

這個Thread會每隔0.5秒寫入一筆資料,填滿十筆資料後再開始顯示折線圖,"理論上"折線圖會一直更新,但"沒有"

runOnUiThread(new Runnable() {
    public void run() {
        dataArraylist.add(new GraphViewData(
            0.5 * (dataArraylist.size()+1),pressure_value));                
            if(dataArraylist.size()>10)
                {
                    drawLineGraph();
                }
            }

最後Jimmy's papa的解法是,每次update UI之前就將折線物件清掉

lineGraphSeries.clear();

然後再次執行

exampleSeries = new GraphViewSeries(dataArraylist);
lineGraphView.addSeries(exampleSeries);

就OK了

ps.Jimmy's papa懷疑這是否是因為ArrayList的某些內部資料成員被設為final的關係?

2011年8月26日 星期五

想榨乾XOOM的電力嗎?試試看這個會隨時更新Sensor值的Widget

寄件者 scratchlab

Jimmy's papa想試試看在XOOM上,是否能隨時按Home鍵後回到主畫面後,就有個氣壓計小工具(Widget)告訴我目前的氣壓值,這工具可以教Jimmy看著氣壓值並且對照戶外的天氣,去了解兩者之間的關係,而且順便讓Jimmy回想一下上個月到科工館玩氣壓體驗艙當時的感覺

不過Jimmy's papa寫這個小工具時,竟然發覺氣壓值無法更新,一查之下android:updatePeriodMillis這個屬性竟然Android 1.5版後就沒效了(這是網友說的,有待查證),官方文件也提到"Updates requested with updatePeriodMillis will not be delivered more than once every 30 minutes."

解決之道有AlarmManager或TimerTask兩種方式解決,Jimmy's papa覺得TimerTask比較簡單,以下是程式碼

package com.jimmyscratchlab.androidbarometerwidget;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.text.format.DateFormat;
import android.util.Log;
import android.widget.RemoteViews;

public class AndroidBarometerWidget extends AppWidgetProvider {
    private static final String TAG = "sensor";
    private  SensorManager sm;
    private String value = "";
    
    @Override
    public void onUpdate(Context context,AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        // TODO Auto-generated method stub
        sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        int sensorType = Sensor.TYPE_PRESSURE;
        sm.registerListener(myPressureListener,sm.getDefaultSensor(sensorType),SensorManager.SENSOR_DELAY_NORMAL);
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 500);
    }

    
    
     private class MyTime extends TimerTask
     {
         RemoteViews remoteViews;
         AppWidgetManager appWidgetManager;
         ComponentName thisWidget;
         
         public MyTime(Context context, AppWidgetManager appWidgetManager)
          {
             this.appWidgetManager = appWidgetManager;
             remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
             thisWidget = new ComponentName(context, AndroidBarometerWidget.class);
          }
          
         @Override
         public void run()
          {
             remoteViews.setTextViewText(R.id.now,  value);
             appWidgetManager.updateAppWidget(thisWidget, remoteViews);
          }
     }
    
    
    
    
    final SensorEventListener myPressureListener = new SensorEventListener(){

        public void onSensorChanged(SensorEvent sensorEvent){
            
            if(sensorEvent.sensor.getType() == Sensor.TYPE_PRESSURE){
                Log.i(TAG,"onSensorChanged");
                
                java.text.DecimalFormat df = new java.text.DecimalFormat("#.#");

                value = "目前氣壓(PRESSURE): "+ df.format( sensorEvent.values[0] )+"millibars"; 
            }
            
        }

        public void onAccuracyChanged(Sensor sensor , int accuracy){
            Log.i(TAG, "onAccuracyChanged");
        }
    };
     
}

2011年8月23日 星期二

AdMob測試

寫完氣壓計測試程式後,接著Jimmy's papa開始測試如何在APP置入AdMob線上廣告,到Google code下載AdMob的SDK及範例程式,參看相關說明文件後,以下是我的程式範例

package com.jimmyscratchlab.androidbarometer;


import android.app.Activity;
import android.content.Context;
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.widget.LinearLayout;
import android.widget.TextView;

import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;

public class AndroidBarometerActivity extends Activity  {
    /** Called when the activity is first created. */
    private AdView adView;

    private static final String TAG = "sensor";
    private  SensorManager sm;
    private TextView myTextView;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Create the adView
        adView = new AdView(this, AdSize.BANNER, "你的發佈商ID");

        // Lookup your LinearLayout assuming it’s been given
        // the attribute android:id="@+id/mainLayout"
        LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);

        // Add the adView to it
        layout.addView(adView);
        
        // Initiate a generic request to load it with an ad
        AdRequest request = new AdRequest();
        request.setTesting(true);//啟用測試模式,也可以在AdMob管理頁面選擇停用測試模式
        adView.loadAd(request);
        
        //-------------------
        myTextView = (TextView) findViewById(R.id.value);
        sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        int sensorType = Sensor.TYPE_PRESSURE;
        sm.registerListener(myPressureListener,sm.getDefaultSensor(sensorType),SensorManager.SENSOR_DELAY_NORMAL);
        
        

    }
    
    @Override
    public void onDestroy() {
      adView.destroy();
      super.onDestroy();
    }

    
    final SensorEventListener myPressureListener = new SensorEventListener(){

        public void onSensorChanged(SensorEvent sensorEvent){
            
            if(sensorEvent.sensor.getType() == Sensor.TYPE_PRESSURE){
                Log.i(TAG,"onSensorChanged");
                
                java.text.DecimalFormat df = new java.text.DecimalFormat("#.#");
                String reading ="PRESSURE: "+ df.format( sensorEvent.values[0] )+"millibars";
                myTextView.setText(reading);
            }
            
        }

        public void onAccuracyChanged(Sensor sensor , int accuracy){
            Log.i(TAG, "onAccuracyChanged");
        }
    };
     
    public void onPause(){
        //此時需關掉sensor,否則會一直運作,直到電力耗盡
        sm.unregisterListener(myAccelerometerListener);
        super.onPause();
    }
    
}

layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView android:id="@+id/value" android:layout_width="fill_parent"
    android:text="@string/hello" android:textSize="14sp"
    android:layout_margin="30dp" android:layout_height="wrap_content"/>
</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jimmyscratchlab.androidbarometer" android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="12" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".AndroidBarometerActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.google.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation" />
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

現在只是測試模式,還不能賺摳摳

寄件者 scratchlab

注意,雖然AdMob有提醒第一次開通需等上兩分鐘,可是Jimmy's papa足足等上一天都盼不到廣告的蹤影,後來只好上AdMob的管理頁面,看是否有哪些選項沒點到,然後點選下圖紅框關於AdSense的選項後,哇!!!好像水庫閘門大開一樣,線上廣告內容源源而至

寄件者 scratchlab

2011年8月19日 星期五

測試XOOM Barometer(氣壓計)

Jimmy's papa一直搞不懂MOTO為何要將Barometer(氣壓計)納入XOOM的Sensor規格中,有網友說爬山用得到,也有人說也許當初採買的物理偵測模組中剛好有Barometer,不過不管真相如何,光看最近新聞報導美國發生怪風吹垮大型演唱會舞台,或者是龍捲風冰雹到處肆虐,或許就美國人而言的確需要身邊的平板電腦或智慧型手機能適時提醒,周遭的氣候是否正在急遽的變化中

以下是簡單的氣壓偵測程式,測試的當下是1008.7 millibar(毫巴),標準大氣壓被定義為1013.25 millibar(毫巴),今天下午雲層還蠻厚的,典型的低氣壓天氣

package com.jimmyscratchlab.androidbarometer;


import com.jimmyscratchlab.androidbarometer.R;
import android.app.Activity;
import android.content.Context;
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.widget.TextView;

public class AndroidBarometerActivity extends Activity  {
    /** Called when the activity is first created. */
    
    private static final String TAG = "sensor";
    private  SensorManager sm;
    private TextView myTextView;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myTextView = (TextView) findViewById(R.id.value);
        sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        int sensorType = Sensor.TYPE_PRESSURE;
        sm.registerListener(myPressureListener,sm.getDefaultSensor(sensorType),SensorManager.SENSOR_DELAY_NORMAL);
        
    }
    
    final SensorEventListener myPressureListener = new SensorEventListener(){

        public void onSensorChanged(SensorEvent sensorEvent){
            
            if(sensorEvent.sensor.getType() == Sensor.TYPE_PRESSURE){
                Log.i(TAG,"onSensorChanged");
                
                java.text.DecimalFormat df = new java.text.DecimalFormat("#.#");
                String reading ="PRESSURE: "+ df.format( sensorEvent.values[0] )+"millibars";
                myTextView.setText(reading);
            }
            
        }

        public void onAccuracyChanged(Sensor sensor , int accuracy){
            Log.i(TAG, "onAccuracyChanged");
        }
    };
     
    public void onPause(){
        //此時需關掉sensor,否則會一直運作,直到電力耗盡
        sm.unregisterListener(myAccelerometerListener);
        super.onPause();
    }
    
}

寄件者 scratchlab

我查氣壓計相關資料順便查到一篇有趣的小文章,有個比較KUSO的版本,改天講給Jimmy聽

話說在比奇堡的泡芙阿姨海底駕駛訓練班,在舉行過期末考後,
泡芙阿姨老師打算將其中一名學生海綿寶寶的物理科答案評定為零分,而這名學生海綿寶寶卻堅決認為他應該得到滿分。
兩人互不相讓,沒有結果。
最後雙方達成協議,決定委請另一位公正且是比奇堡當地最有科學頭腦的松鼠珊迪老師來裁決。

  這位被委任的珊迪老師首先要了解一下試卷的內容,
原來,試卷上的的題目是這樣的:「試說明如何利用一具氣壓計測出海之霸餐廳的高度。」
那名學生的答案是:「將此氣壓計攜至海之霸餐廳頂端,繫上一長繩,然後將氣壓計垂放至街道上,再將其收回。
測量所用繩子之長度,則此長度即為海之霸餐廳之高度。」

  看完之後,他覺得這位學生海綿寶寶的回答完整而正確,的確有充足的理由得到滿分。
但這位珊迪老師繼而又想,高分應該代表這名學生海綿寶寶在物理學能力上的一種肯定,
而他的答案卻顯然不能證明如此,於是他建議給這位學生海綿寶寶另一次做答的機會。

  這一次,他有六分鐘的時間回答問題。泡芙阿姨老師並且一再提醒他,答案中必須包含深海物理學方面的知識。
過了五分鐘之後,他的答案仍然一片空白。珊迪老師問他說,是不是準備放棄了。
他抬起頭來回答說:「不,對於這個問題,我有許多不同的答案。我只是在思考一個最佳的答案。」

  在最後一分鐘裡,他一口氣寫完了答案。
他的回答是這樣的:「將氣壓計拿到海之霸餐廳門外,頭頂著氣壓計,吹起大泡泡包覆全身,用馬表計算泡泡到屋頂的時間。
然後利用亞特蘭提斯神奇泡泡浮力公式,即可算出海之霸餐廳的高度。」
泡芙阿姨老師看完答案後一陣苦笑,決定投降。而那位委任的珊迪老師,則給了這位學生海綿寶寶接近滿分的成績。

  在離開辦公室之時,那位受託的珊迪老師突然想起這名學生海綿寶寶曾提到他還有許多不同的答案,
於是又將他找來,問他到底是些什麼答案。
學生回答說:「沒錯。還有許多方法一樣可以測出海之霸餐廳的高度。
舉例來說,你可以在大晴天裡將氣壓計拿到室外,量出氣壓計及其影子的長度,
再量出建築物影子的長度。
利用簡單的比例關係,即可計算出建築物的高度。」

  聽完後,珊迪老師說:「很好,那其它的呢?」於是他又繼續回答說:
「有一個非常基本的計算法,我想你會喜歡的。只要拿著氣壓計沿著階梯而上,
一面沿著牆壁用氣壓計的長度為單位,畫下記號。
最後,計算一下這些記號的數目,即可得到海之霸餐廳的高度,這是一個非常直接的方法。
當然啦,如果你希望用一個較複雜的方法,可以將氣壓計繫於繩子的末端,當作鐘擺一般擺動。
然後分別在街道,以及樓頂測出其重力加速度,利用此差異即可求出海之霸餐廳的高度。」

  最後海綿寶寶下結論說,還有其它的方法可以解決此一問題。
也許最好的方法就是直接帶著氣壓計去敲海之霸餐廳的門。
當皮老闆出來應門時,對他說:「皮老闆先生,我這兒有個很棒的氣壓計,
如果你願意告訴我海之霸餐廳的高度,我就把氣壓計加上蟹堡秘方一併送給你。」

  這時候,珊迪老師忍不住問他說:「你難道真的不知道這個問題的正確解答嗎?」
他承認說知道,但他接著說:「從小到大,我已經厭倦老師不斷教導我們如何去思考,
如何去使用『科學的方法』,而不是教導我們去認識事物的構造與本質。
因此,我才以這種玩笑的方式來表達我的抗議。」

2011年8月16日 星期二

Google宣布以天價125億美元併購MOTO行動通訊部門

Google重金買下MOTO這帖大補丸,這是今天Android陣營的大消息,對於Android APP開發者來說,這無疑是顆定心丸,暫時不用再擔心Android會被其他陣營以專利權手段打趴在地

呵呵,這是否代表Jimmy's papa的XOOM未來更新Android版本速度會加快一點嗎?