2013年9月29日日曜日

androidカスタムダイアログの作り方

androidでカスタムダイアログを作った例です。

○ソースコード




        LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
        final View viewSettingDialog = inflater.inflate(R.layout.setting_dialog, (ViewGroup)findViewById(R.id.layout_root));
        ((CheckBox)viewSettingDialog.findViewById(R.id.checkBoxVibrator)).setChecked(true);
        ((SeekBar)viewSettingDialog.findViewById(R.id.seekBarVolume)).setProgress(50);
        
        //
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(viewSettingDialog);
        builder.setPositiveButton("OK", new OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { // OKボタンクリック処理
                boolean valVib = ((CheckBox)viewSettingDialog.findViewById(R.id.checkBoxVibrator)).isChecked();
                int valVol = ((SeekBar)viewSettingDialog.findViewById(R.id.seekBarVolume)).getProgress();
            }
        });
        builder.setNegativeButton("Cancel", new OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // Cancel ボタンクリック処理
            }
        });
        builder.create().show();



○setting_dialog.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/layout_root"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="10dp" >
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/option_volume" />
        <SeekBar
            android:id="@+id/seekBarVolume"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:max="100"
            android:padding="16dp"
            android:progress="50" />
        <CheckBox
            android:id="@+id/checkBoxVibrator"
            android:layout_width="308dp"
            android:layout_height="wrap_content"
            android:text="@string/option_vibrator" />
    </LinearLayout>




画面はeclipseでデザインできるので便利です。
その際に「LinearLayout」にID「layout_root」を付けておき、
その「layout_root」を「R.id.layout_root」と
もう一つ、「R.layout.setting_dialog」でinflateでViewで読み込んで表示します。

eclipseでデザインできるのが便利ですねえ。



2013年9月22日日曜日

java文字列から指定した部分を取得する

java文字列から指定した部分を取得する例です。

String val;
val = "abcde":
val = val.substring(1, 3);

これで、「bc」が取り出せます。


substringの引数
 ゼロ始まりの数字
 1つ目が、開始位置
 2つ目が、終了位置の -1



-1が直感的ではないように思いますが、このような仕様でした。

C#のSubstringやVisual Basic ApplicationのMid$の様なものですね。

2013年9月21日土曜日

Androidで強制終了されにくいサービスを作る

Androidでサービスを作ると、OSによって強制終了されてしまうがなるべく強制終了されにくいサービスを作る方法


○AndroidManifest.xmlへ記述

    <application ~

        <service android:name="jp.blogspot.stella_house_software.sampleservice.MainService" />


○Activityからサービスのインテントを起動する

Intent intent = new Intent();
intent.setClass(getApplicationContext(), MainService.class);
startService(intent);


○サービス本体

package jp.blogspot.stella_house_software.sampleservice;

import android.support.v4.app.NotificationCompat;

public class MainService extends Service  {



@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("tag_debug", "[onStartCommand]");

//Notification notification = new Notification.Builder(this)
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("content title")
.setContentText("content text")
.setSmallIcon(R.drawable.ic_launcher)
.build();

NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, notification);

startForeground(1,notification);

return START_STICKY;
}
}

ポイントは、
・startForeground(1,notification);を入れる。
・サービスの onStartCommand を START_STICKY で returnする。


2013年9月20日金曜日

androidウィジットの値の取得方法、値の設定方法

androidで、画面の部品、ウィジットから値を取得する方法と、値を設定する方法です。

取得
String val = (String)(((TextView)findViewById(R.id.text_mm)).getText());

設定
((TextView)findViewById(R.id.text_mm)).setText( val);


取得はgetText,設定はsetText、例ではTextViewですが、Buttonなども同じ。
よく使うので1行で書いてしまっています。


2013年9月8日日曜日

Windows自動認識しないハードウェアの追加方法

「hdwwiz.exe」を実行すると「ハードウェアの追加」ウィンドウが表示される。

「一覧から選択したハードウェアをインストールする(詳細)」を選択して「次へ」クリック

「すべてのデバイスを表示」を選択して「次へ」クリック
 ここで適当なハードウェアの種類を選んだ場合は次の画面でリストの中が表示されなくなる
 「ディスク使用」からインストールするならあえて適当なのを選んだ方が早いかtodo

ここで左ペイン「製造元」に「Microsoft」を選んで
右ペイン「モデル」に「Microsoft Loopback Adapter」を選べば
ネットワークの無い環境でIPが設定できる。
(Windows8では「Microsoft KM-TEST Loopback Adapter」とう名前に変わっているらしいtodo)

2013年9月7日土曜日

hyper-vにredhatlinuxをゲストOSとして動かした際のネットワーク設定

ネットワークの有効化

hyper-vの設定から「ネットワークアダプタ」は削除する。
hyper-vの設定から「レガシネットワークアダプタ」を追加する。
 ネットワークは「ローカルエリア接続-仮想ネットワーク」を選択する。


「ネットワークアダプタ」では認識しなかったtodo
「レガシーネットワークアダプタ」では遅くなるはずなのでこれでは解決にならないtodo

guestにwindowsをインストールすると「レガシーネットワークアダプタ」は
「Intel 21140-Based PCI Fast Ethernet Adapter(Generic)」と表示される。
「ネットワークアダプタ」の場合は「Microsoft Virtual Machine Bus Network Adapter」になる。

2013年9月6日金曜日

pstファイルのコピーによるアウトルックのデータ移行方法

パソコンを入れ替えた際のアウトルックのデータ移行方法

outlook 2010
 画面左上のメニュー「ファイル」→左ペイン「情報」→右ペイン「アカウント設定」

アカウント設定のウィンドウが表示される。
「データファイル」タブ

デフォルトで「Outlookデータファイル」場所「C:\Users\Administrator\Documents\Outlook ファイル\Outlook.pst」

タブの中の上の方にある「追加」クリック


・デフォルトであるファイルは、そのデータが必要ないのであれば、
 タブの中の上の方にある「削除」で消してしまっていい。
 ただし、「既定に設定」を別のファイルに移動させてから、outlookを一度再起動させた後に削除できる。



.pstファイルの保存先はアウトルックのバージョンとOSのバージョンによって違う
 (Windows XP todo)
  C:\Documents and Settings\<username>\Local Settings\Application Data\Microsoft\Outlook

 (Windows 7 + Outlook 2010)
  C:\Users\Administrator\Documents\Outlook ファイル

ディレクトリ名、保存場所など若干未確認情報ありです。

2013年9月5日木曜日

hyper-vの保存先の変更

左ペインの「Hyper-V マネージャー」のコンピュータ名を選択

中側の「操作」ペインの移動する仮想マシンを選択する。
右側の「エクスポート」をクリック
移動したい先のディレクトリを指定して実行する。

エクスポートが完了したら、元の仮想マシンは削除すること。
インポート前に削除しないとインポートできない。
破棄にもじかんがかかり「状況」で「破棄中」のパーセント表示が確認できる。
 破棄したにもかかわらず元のディレクトリにはファイルが残っている
 さらにエクスプローラーから消そうととしても消えない
 一度サーバーPCを再起動すれば削除できた

・右側の「仮想マシンをインポート」をクリック
 「仮想マシンが含まれているフォルダーの場所を指定してください」で
 エクスポートしたディレクトリを指定する。
 エクスポートしたフォルダは「Snapshots」「Virtual Hard Disks」「Virtual Machines」がある。
 >設定
 >仮想マシンを移動または復元する(既存の一意なIDを使用する)
 >仮想マシンをコピーする(新しい一意なIDを作成する)
 >
 >すべてのファイルを複製し、同じ仮想マシンを再度インポートできるようにする
 > ファイルをコピーしないと、元に別の場所にファイルをバックアップしていない限り、
 > 同じ仮想マシンを再度インポートする事は出来ません。

「仮想マシンを移動または復元する(既存の一意なIDを使用する)」を選択して
  「すべてのファイルを複製し、同じ仮想マシンを再度インポートできるようにする」はチェックオフのまま
  「インポート」ボタンをクリックする。

・インポートが完了すると警告が出る
 >仮想マシンのインポートは成功しましたが、次の警告が返されました。
 >インポートは完了しましたが、警告があります。
 >インポートは完了しましたが、警告があります。詳細については、
 >Hyper-V-VMMSイベントログでAdminイベントをチェックしてください。


ファイルをコピーするだけではだめらしいtodo
複製とコピーって校正もれ

ハードディスクのvhdごとコピーされるが、Dドライブの別vhdも一緒にコピーしてくれるのか確認必要todo

2013年9月4日水曜日

Windowsで消せないファイルを消す

>ファイルアクセスの拒否
>このファイルを操作するには ~ からアクセス許可を得る必要があります。

robocopy c:\dummy c:\cantdeletedir /purge /w:0 > nul

 c:\cantdeletedirという消したいフォルダの例
 c:\dummyというダミーの空ディレクトリを作っておいてから
 コピー元としてc:\dummyを指定して、
 コピー先として本当に消したいディレクトリc:\cantdeletedirを指定して
 /purgeというコピー元に存在しないファイルは、
  コピー先のファイルから消すオプションを付けて実行する。
 /w:0で再試行時に30秒待つ標準の設定を0秒と即時にするオプション
 > nul 表示が多くて遅い場合は表示させない

2013年9月2日月曜日

HYPER-V で RedHat Linux を動かす

(マイクロソフトのサイト id=28188)
Linux Integration Services Version v3.2 for Hyper-V - 日本語
バージョン:3.2
公開日:2011/12/01
Linux IC v3.2.iso 2.2 MB
Linux Integration Services v3.2 Read Me.pdf 280 KB

1) isoをマウントする
2) mount /dev/cdrom /media
3) cd /media
4) ./install.sh
5) reboot

インストールしないとXが動かないが
インストールすればXも正常に起動しました。
最初のkudzuの青い画面でコンフィグを動かします。

host OS : Windows2008R2Server
guest OS : rhel5 x64 で動作確認しました。

ゲストOSもx64が動くなんていいですね。

2013年9月1日日曜日

hyper-vで Virtual PC 2007の共有ネットワーク(NAT)と同じ設定をする

左ペインの「Hyper-V マネージャー」のコンピュータ名を選択
 ↓
右側の「操作」ペインに「仮想ネットワークマネージャー」をクリック

「仮想ネットワークマネージャー」ウィンドウが表示される

・左ペインにデフォルトでは「ローカルエリア接続 - 仮想ネットワーク」がある。
 「接続の種類」
   「外部」選択されている
   その下のコンボボックスに物理NICが選択されている
   「管理オペレーティングシステムにこのネットワークアダプタの共有を許可する」にチェックが入っている。

・hyper-vで Virtual PC 2007の共有ネットワーク(NAT)と同じように
 ホストOSとその下で動いているゲストOSのみで通信をするためには以下の設定をする。

左ペイン「新しい仮想ネットワーク」をクリック
右ペイン「内部」を選択して「追加」ボタンクリック

登録すると、左ペインに1つ追加されている
ホストOSの「ネットワーク接続」を見るとアダプタが一つ増えている。
「仮想ネットワークマネージャー」ウィンドウで設定した「名前」が
そのまま「ネットワーク接続」画面のアダプタ名になっている。

・ホストOSの「ネットワークマネージャー」から、
 今回作成したアダプタ名のプロパティを出してIPアドレスを設定する。


・ゲストOSの「設定」から左ペイン「ネットワークアダプタ」を選択して
 右ペイン「ネットワーク」のコンボボックスで、今回作成したアダプタ名を出す。

 ゲストOSを起動してゲストOSの中のネットワーク設定のIPv4を設定する。