物理キーボード接続時にソフトウェアキーボードも表示する設定を促す

以下のコードをonResume()などに書くと良い

if (activityInstance.getResources().getConfiguration().hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
    Toast.makeText(activityInstance, "物理キーボードを無効にしてください。", Toast.LENGTH_SHORT).show();
    ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showInputMethodPicker();
}

WebBrowserコントロールで互換表示を無効に

以下のレジストリエントリを追加する。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"exeName.exe"=dword:00002af9

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"exeName.exe"=dword:00002af9

Windows上でのMBR初期化

1. 管理者としてコマンドプロンプトを実行

2. 下記コマンドを実行しDISKPARTを起動
 diskpart

3. ディスク一覧を見る
 list disk

4. ディスクを選択する
 select disk [3で確認したディスクNo]

5. ディスクをクリーン(たぶんデータ消えます)
 clean

6. パーティション作成
 create partition primary

7. 作成したパーティションを選択
 select partition 1

8. パーティションをアクティブに
 active

9. フォーマット
 format fs=fat32

10. 終了させる
 exit

C#でファイルをPUT送信する

using System.Net; を書いておかないとダメです。

// ファイルを開く
using (FileStream stream = new FileStream("C:\\test.txt", FileMode.Open, FileAccess.Read)) {
    // PUTでstream送信する
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://api.example.com/upload/");
    request.Method = "PUT";
    request.ContentType = "application/octet-stream";
    request.ContentLength = stream.Length;
    request.AllowWriteStreamBuffering = false;
    // タイムアウト6h
    request.Timeout = 360 * 60 * 1000;
    request.ReadWriteTimeout = 360 * 60 * 1000;
    try {
        using (Stream requestStream = request.GetRequestStream()) {
            stream.CopyTo(requestStream);
        }
    } catch (Exception) {
        // nop
    }
    request.GetResponse();
}

Activityのライフサイクル

AndroidアプリはActivityという画面のベースのようなもので構成される。このActivityのプロセスはAndroid OSで管理されており、基本的には「いつ画面が破棄されても大丈夫な仕組み」を前提に設計をしていく必要がある。

IntentとonActivityResult()

他のActivityを表示して処理結果を取得するにはstartActivityForResult()を使用する。処理結果を取得する必要がない場合にはstartActivity()を使用する。

// このコードで処理結果取得モードで他のActivityを開始する
Intent intent = new Intent(activityInstance.getApplicationContext(), TargetActivity.class);
activityInstance.startActivityForResult(intent, 1);

// 開始されたActivity側では処理結果を以下のコードで返す
Intent data = new Intent();
data.putExtra("test", "value");
activityInstance.setResult(RESULT_OK, data);
activityInstance.finish();

// 呼び出し元では下記メソッドをオーバーライドして結果を取得する
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
        case 1:
            // resultには"value"が入る
            String result = data.getStringExtra("test");
            break;
        }
    }
}

Androidのスレッドについて

AndroidのUI(View)をコントロールするスレッドは通常のスレッドとは異なり、アプリが起動した段階から専用のスレッドが開始される。すべてのUI(View)の描画処理などはそのスレッドが行うため、他のスレッドからはViewに変更を加える事はできない。

AndroidのUIスレッド以外のスレッドからUIに変更を加えたい場合は、Android.os.Handlerのインスタンスを生成しpostメソッドで実行したいRunnableを渡す。UIスレッドはスケジュールされた順番にRunnableを実行してUIを描画していく。