ラベル Eclipse の投稿を表示しています。 すべての投稿を表示
ラベル Eclipse の投稿を表示しています。 すべての投稿を表示

2011年12月9日金曜日

PhoneGap入門

PhoneGapとは

  • HTMLとJavaScriptだけでAndroidアプリを作成できるフレームワーク。
  • カメラなどのデバイスのAPIを使用できる。
  • HTML5、JQueryMobileを組み合わせるといろいろできそう。


  1. まずはEclipseでAndroidProjectの作成
  2. PhoneGapフレームワークの設定
    公式ページからダウンロードして配置する。

  3. Activityの修正
    import android.os.Bundle;
    import com.phonegap.*;
    public class TestPhoneGapActivity extends DroidGap {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            super.loadUrl("file:///android_asset/www/index.html");
        }
    }
  4. AndroidManifestの修正
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.utsugen"
        android:versionCode="1"
        android:versionName="1.0" >
        
        <supports-screens
    android:largeScreens="true"

    android:normalScreens="true"android:smallScreens="true"android:resizeable="true"android:anyDensity="true"/>

    <uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.RECEIVE_SMS" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


        <uses-sdk android:minSdkVersion="10" />

        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:label="@string/app_name"
                android:name=".TestPhoneGapActivity"
                android:configChanges="orientation|keyboardHidden" >
                <intent-filter >
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    </manifest>



  5. レイアウトの作成
    assets/www/index.htmlを作成
    <!DOCTYPE HTML>

    <html>
    <head>
    <title>TestPhoneGap</title>
    <script type="text/javascript" charset="utf-8" src="phonegap-1.2.0.js"></script>
    <script type="text/javascript" charset="utf-8">
    <!--
    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
    document.getElementById('myDevice').innerHTML = "PhoneGap on " + device.platform;
    document.getElementById('ready').innerHTML =
    "<ul><li>device name : " + device.name + "</li>" +
    "<li>devie version : " + device.version + "</li></ul>";
    }
    -->
    </script>

    </head>

    <body>
    <h1>Hello world!</h1>
    <h2 id="myDevice"></h2>
    <p id="ready">デバイス情報取得中...</p>

    </body>
    </html>

完成!




2011年10月15日土曜日

画面ロックアプリの作成(インストール)

Android Marketは登録していないのでDropBoxで開く。






親指で押せるようになった。
押せば即画面ロックする。


アンインストールする前には、デバイス管理者を無効にする必要がある。
[現在地情報とセキュリティ]→[デバイス管理者を選択]















画面ロックアプリの作成(やっと本題)

AndroidManifest.xml
デバイス管理APIをつかうためにreceiverを定義する。
receiver   : LockReceiver(DeviceAdminReceiverを継承したクラス)
permissionに "android.permission.BIND_DEVICE_ADMIN" 
intent-filter : "android.app.action.DEVICE_ADMIN_ENABLED"
この指定をするとインストール時にユーザ確認をしてくれる。
receiverはXMLファイルで定義するのだが、ファイル名は
resourceで指定した "@xml/device_admin" となる。
-------------------------------------------------------------------------------------------

<receiver android:permission="android.permission.BIND_DEVICE_ADMIN"          
     android:name=".LockReceiver">
        <meta-data android:name="android.app.device_admin"                       android:resource="@xml/device_admin" />
        <intent-filter>
       <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"></action> 
        </
intent-filter>
</receiver>
-------------------------------------------------------------------------------------------

device_admin.xml
アプリインストール時にforce-lockのユーザ確認が行われる。
-------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<device-admin
  xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
        <force-lock />
  </uses-policies>
</device-admin>
-------------------------------------------------------------------------------------------

LockReceiver.java
DeviceAdminReceiverを継承したクラス。
実装は何もしない。

LockNowActivity.java
-------------------------------------------------------------------------------------------
public class LockNowActivity extends Activity {

// デバイスで強制されたポリシーを管理するためのクラス(の変数)
DevicePolicyManager m_devicePolicyManager;
// LockReceiverクラス生成用
ComponentName m_lockReceiver;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ハンドラ取得
        m_devicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);


        // LockReceiverが有効かをチェック
        m_lockReceiver = new ComponentName(this, LockReceiver.class);
        boolean active = m_devicePolicyManager.isAdminActive(m_lockReceiver);
        if (active) {
   // 有効なので画面ロック
         m_devicePolicyManager.lockNow();
        } else {
   // 有効化する
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, m_lockReceiver);
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Due to lock screen.");
            startActivity(intent);
        }
         finish();
   }
}

-------------------------------------------------------------------------------------------



画面ロックアプリの作成(サンプルプロジェクト)

プロジェクトの作成
[ファイル]→[新規]→[その他]→[Androidプロジェクト]
プロジェクト名:(ここでは)LockNow

この時点でHelloWorldアプリが出来上がっている。
-----------------------------------------------------------------------------------
<AndroidManifest.xml>
Activity : ".LockNowActivity"
intentFilterに "android.intent.action.MAIN" が指定されているので
アプリ起動時にこのActivityが呼び出される。
同じく "android.intent.category.LAUNCHER" が指定されているので
ホーム画面のランチャーに配置できる。
画面ロックアプリには都合がいい。

<LockNowActivity.java>
onCreate : setContentViewで R.layout.main レイアウトを呼び出すだけ。

<main.xml>
LinearLayout : TextView が配置されてその中身は "@string/hello" 。

<strings.xml>
hello : Hello World, LockNowActivity!
-----------------------------------------------------------------------------------

動かしてみる。

PC上のエミュレータAVDの作成
[ウィンドウ]→[Android SDKおよびAVDマネージャ]
ターゲットAPIを選択して作成

[実行]→[デバッグ]

ちゃんとブレークポイントで止まります。
DDMSパースペクティブだとスクリーンショットも撮れます。


画面ロックアプリの作成(環境構築)

Eclipse
どうやら10周年らしい。
バージョン3.7 INDIGO


pleiadesで日本語化するにはeclipse.iniにjarファイルの指定を追記するのだが、
macでは普通にFinderで探しても見えない。
Eclipseアイコンをcontrolクリックして
「パッケージの内容を表示」を選択するとeclipse.iniまでたどり着く。


EclipseアイコンはEclipse.appというアプリケーションファイルで
その下にディレクトリ階層を持っている。
ちなみにその中のEclipse本体はunix実行ファイルという形式でターミナルのアイコンになっている。

相対ファイルでjarを指定。
-javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

ようやく起動だが、初回は-cleanオプションがないとエラーが出る。
ターミナルで下記を打ち込む。
/Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse -clean



Android
Android SDK
ここかダウンロードして適当なところに配置する。

EclipseのAndroid Plugin
[ヘルプ]→[新規ソフトウェアのインストール]
名前    :何でも良い
ロケーション:https://dl-ssl.google.com/android/eclipse/
[Eclipse]→[環境設定]
 android SDKロケーションでAndroid SDKの場所を指定


Platform API
[ウィンドウ]→[Android SDK and AVD Manager]
 Installed Packagesですべて更新するとAPIのバージョンを選択できる。
 今回の画面ロックには2.2で導入されたデバイス管理APIを使うため2.2を選択。
 (依存関係でAndroidPlatformTools Revision7がいるみたい)

画面ロック

スマートフォンになってもやっぱり操作は片手の親指だけでしてる。
そして使い終わってカバンに入れるときには画面をロックする。

この画面ロックのための電源ボタンが曲者で本体の一番上にある。(Xperia)
となると親指では届かず持ち替えないといけない。

この「持ち替える」で非常にストレスが貯まる。








そこで画面ロックするためのアプリを作る事にした。