カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

WebViewを使ったハイブリッドアプリの作成 [Android]

HTML5+JavaScriptを使ってスマホアプリを開発することもできます。
ネイティブとWebアプリの機能を兼ね備えた、俗にハイブリッドアプリと呼ばれるそうです。

ここで作成するのはハイブリッドというには簡単すぎるものですが、
触りとなるものです。

まず、メインとなるアクティビティを作成します。
サンプルですので、WebViewのみ表示するものとなっています。

public class SampleActivity extends Activity {

    private final int FC = ViewGroup.LayoutParams.FILL_PARENT;
    public static WebView web;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(1);

        setContentView(linearLayout);

        web = new WebView(this);
        linearLayout.addView(web, new LayoutParams(FC, FC));

        // JavaScriptを有効にする
        web.getSettings().setJavaScriptEnabled(true);

        // JavaScriptにAPIを追加する
        web.addJavascriptInterface(new JavaScriptObject(this), "myapi");

        // スクロールバーを非表示にする
        web.setHorizontalScrollBarEnabled(false);
        web.setVerticalScrollBarEnabled(false);

        // フォーカスを有効にする
        web.setFocusable(true);

        // assetsディレクトリに用意したHTMLを読み込み
        web.loadUrl("file:///android_asset/sample.html");
    }

}

29行目のフォーカスを有効にするというのはデフォルトで有効になっていますが、
敢えて明示的に有効にしています。
どういった場合に無効にするのかと言いますと、全画面表示のゲームを作成する場合等です。
無効にする場合は引数をfalseとします。

web.setFocusable(false);

更にその場合はスリープモードにしないようにもしておいたほうがよいでしょう。
onCreateの最後にでも記述しておきましょう。

// スリープモードにしないようにする
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

次に、JavaScriptのAPIとなるクラスを作成します。 続きを読む…»

7,510 views

セカンダリDNSサーバーの設定

自前でセカンダリDNSサーバーを構築する際の設定例をご紹介します。

まずプライマリDNSサーバーの設定。
/etc/named.confでセカンダリを用意したいドメインのゾーン設定を修正します。

zone "example.jp" in {
    type master;
    file "example.jp";           //ゾーン設定ファイルを指定
    allow-transfer { 0.0.0.0; }; //セカンダリDNSサーバーのIPアドレス
};

allow-trasferでセカンダリDNSサーバーからのゾーン転送を許可する。※セキュリティ上必須

次にセカンダリDNSサーバーの設定をします。
/etc/named.conf

zone "example.jp" in {
    type slave;               //セカンダリなのでタイプをスレーブに指定
    file "slaves/example.jp"; //ゾーン設定ファイルを指定(省略可)
    masters { 0.0.0.0 };      //プライマリDNSサーバーのIPアドレス
};

それぞれnamedを再起動し設定完了。
ちなみに、ゾーン転送はTCP53ポートを使用するらしいのですが、UDPを解放しないとできなかった。
続きを読む…»

7,461 views

サーバーをプライベートネットワークで運用する場合の注意点

ブロードバンドルーターで静的IPマスカレードを使用し、サーバーをプライベートネットワークで運用する場合の注意点をご紹介。

サーバーをプライベートIPで運用する場合、内部での名前解決をしてあげないといけません。

内部からのドメイン名前解決は/etc/hostsファイルに以下のように記述
※ドメインがexample.jp、ルーターが192.168.100.1、サーバーがホストwwwの192.168.100.2とします。

192.168.100.2   www.example.jp

これを書いておかないとサーバー自身でも自サイトを見ることができません。
更に自サイト内でフルパス参照ができません。
※リンクでページを移動するだけなら可能(クライアントの名前解決によるため)

特に複数のウェブサーバーがあり、別のウェブサーバーからデータを
PHP等のプログラムを使って読み出そうとすると、名前解決できずにエラーになります。

他の事例としては、メールサーバーとウェブサーバーが同ネットワーク内に
別に存在する場合で、ウェブサーバーからフォーム等でメールを同ネットワーク内の
メールサーバーで受けているアドレスに送る場合にも注意が必要です。
続きを読む…»

4,788 views

カメラを扱うまとめ – Android

Androidでカメラを扱うまとめです。
単純に撮った写真を保存するパターンと、パラメーターを指定して保存するパターン、
撮影した画像を圧縮して保存するパターンの3パターンを紹介します。

まずは、カメラを使用するために必要なパーミッションをAndroidManifest.xmlに記述します。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />

撮影処理をするSurfaceViewを継承したクラスを作成します。

まず、簡単に保存するパターン 続きを読む…»

4,928 views

端末の起動時に処理を実行する [Android]

Androidでは、端末の起動時に発行されるandroid.intent.action.BOOT_COMPLETEDというブロードキャストインテントを受け取り、処理を実行させることができます。

これを利用し、バックグラウンドで常駐するアプリを作成することが可能です。
ここでは例として位置情報を取得し、位置情報が更新されたらトーストでメッセージを表示するサービスをバックグラウンドで常駐させるように作成しています。

AndroidManifest.xmlapplicationタグ内に以下を記述

<service android:name="ExampleService"></service>
<receiver
    android:name=".BootReceiver"
    android:enabled="true">

    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

起動時にブロードキャストインテントを受け取れるようにパーミッションの設定を記述します。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

ブロードキャストインテントを受け取るブロードキャストレシーバーを 続きを読む…»

10,196 views