2012年1月29日日曜日

Intentでの値の受け渡し方


Intentクラスに、値を受け渡すためのメソッドが用意されているので
これを用います。

★Set
 
i.putExtra("tag1", mConfig.mIpAddress);
i.putExtra("tag2", mConfig.mPortNum);
i.putExtra("tag3", mConfig.10080);

★Get
 
Intent i = this.getIntent();
boolean enable = i.getBooleanExtra("tag1", false);
String ipAddress = i.getStringExtra("tag2");
int portNum = i.getIntExtra("tag3", 10080);
上記の他にもいろいろあります。 ※Serviceの場合は、getIntent()がないのですが、onStartメソッドの引数で取得できます。

Notification

1.NotificationManager を取得する
 
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2.Notificationオブジェクト生成
 
Notification notification = new Notification(
android.R.drawable.btn_default,
"通知情報が届きました",
System.currentTimeMillis());

・Notificationクラス
→通知情報のコンテキスト
 サウンド、バイブレーション、LEDを用いてアラートする事も
 引数1 icon 一覧に表示するアイコンID
 引数2 text 表示するテキスト
 引数3 表示する時間

3, PendingIntentを用意
 
Intent intent = new Intent(Intent.ACTION_VIEW);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
・PendingIntent
Intentを、タイミングを指定して発行することができるIntent。
時間を指定したり、イベント発生時に発行する。

4.通知情報の設定
 
notification.setLatestEventInfo(
getApplicationContext(),
"アプリ名",
"通知情報の説明文",
contentIntent);

5.一旦、Notificationを削除
 
nm.cancel(id)
6.Manager経由でNotify発行
 
nm.notify(R.string.app_name, notification);

Failed to install ----.apk on device

USBデバッグでデバイスを繋いだ状態で、apkをインストール出来なかった
症状が発生したのでメモ。

ググったところMP3をパッケージに含めたために
発生した転送のタイムアウトエラーでした。

「ウィンドウ」→「設定」→「Android」→「DDMS」→「ADB 接続タイム・アウト」
の時間を変更することで、問題解決。

2011年12月27日火曜日

謎のエラーで実行できない(2)


またしても、プロジェクトをビルドしても実行できなくなった。
ちょいとManifest.xmlをいじっていたり、使ってないプロジェクトを閉じたり
していただけなんだけど・・以下のエラーが出る。

> Error generating final archive: Debug certificate expired on ...

解決手順:

1.プロジェクト→クリーンを行う

↓それでも治らない

2.デバッグのキーストアとかゆう情報の期限切れらしい
JDKに付属する keytool というもので、キーストアを再度生成して置き換える
ことで問題は解決した。

●手順 A.キーストアの場所を確認
 →eclipseの「ウィンドウ」「設定」「Android」「ビルド」「Default debug keystore」から
パスを確認

自宅環境では以下の場所だった。
> C:\Documents and Settings\PCのユーザー名\.android\debug.keystore

●手順 B. keytool.exeを用いて、以下のコマンドでキーストアを生成する
keytoolがない場合はJDKをインストールする。
keytoolのパスが通っていない場合は、環境変数にパスを通して置く
自宅環境では以下の場所だった。
> C:\Program Files\Java\jdk1.6.0_23\bin

コマンドプロンプトで以下を実行

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000 -dname "CN=Android Debug,O=Android,C=US"

パスワードを要求されるので android と入力する

●手順 C.ファイルの置き換え
C:\Documents and Settings\PCのユーザ名\.android

に debug.keystore というファイルが出来ていたので
それを、Aのファイルに置き換える。

●手順 D.
実機を繋いでいる場合は、一度apkをアンインストールしてから
もう一度、プロジェクトをCleanして実行する


参考サイト
http://magpad.jugem.jp/?eid=151
http://magpad.jugem.jp/?eid=77

2011年12月19日月曜日

ステータスバーに進捗を表示する


1.OnCreate()と、SetContentView()の間にプログレスバーの許可を書く

// プログレスバー許可
requestWindowFeature(Window.FEATURE_PROGRESS);


2. SetContentView()後に、まずはプログレスバーをOFFにしておく

// プログレスバー表示の設定
setProgressBarVisibility(false);

3.以下のメソッドで、プログレスバーを操作

引数は、 0 - 10000 の範囲で進捗を通知する。
10000になるとプログレスバーが消える

setProgress();

以上!

2011年12月18日日曜日

オプションメニューの作り方


使い方は、Activityのメソッドをオーバーライドする方式なので簡単。

○説明
menu.addメソッドでメニューを追加する。
・2番目の引数のMENU_ID01にメニューIDを指定する。Menu.FIRSTから順番に指定していけばOK
・4番目の引数に、メニュー名を指定する 
 
@Override
// オプションメニュー生成時のイベント
public boolean onCreateOptionsMenu(Menu menu)
{
 // オプションメニューを生成、追加する
 MenuItem item = menu.add(Menu.NONE, MENU_ID01, Menu.NONE, "SampleMenu");
 // アイコンを設定する
 // android.R.drawable内にシステムデフォルトのアイコンが多数用意されている
 item.setIcon(android.R.drawable.ic_menu_preferences);
 // キーボードショートカット
 item.setAlphabeticShortcut('e');
 return super.onCreateOptionsMenu(menu);
}

@Override
// オプションアイテムクリック時のイベント
public boolean onOptionsItemSelected(MenuItem item)
{
 switch (item.getItemId())
    {
    case MENU_ID01:
     // メニューが選択されたときの処理
     break;
    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

@Override
// オプションメニューが閉じられたときのイベント
public void onOptionsMenuClosed(Menu menu)
{
}

2011年12月5日月曜日

実行時にeclipseのコンソールに謎のエラー


ファイルダイアログを作りたかったが
難しそうだったので、フリーの外部ソースをパクって来て
埋め込んだら、突然、以下のエラーが出て起動すらしなくなった。

ERROR: Unknown option '--no-crunch' ~

最初は、コードのバグを疑ったがようやらそうではなかった。
ググッてみたところ、SDK Managerのアップデートしたら解決した。
eclipseのアップデートからだけではダメなようで
SDK Managerを起動して、そこからキチンとupdateしましょう。

いままでのソケット通信をするアプリは、このバージョンで問題なく動いてたのだけど
何からの処理に依存して、上記のエラーが発生するのだろうか・・。