AndroidManifest

Androidアプリ開発 On Createが2回呼ばれる

Androidアプリのマニフェストファイル。

Android 非同期通信が終了したらアクティビティを呼ぶ

Android

Android 非同期通信が終了したらアクティビティを呼ぶ

Androidアプリで非同期通信で何かをPOSTしたりする場合は、下記のサイト様のHTTP通信のPOSTリクエストをする汎用クラス (文字化け無し+非同期タスク)を使わせて頂いております。

http://d.hatena.ne.jp/language_and_engineering/20111121/p1

onPostCompetedで、どうやって他のアクティビティを立ち上げるのかな?と思ったところ、次のようにすればよいようです。

 private static HttpPostTask UserCreateAccount (final Context context, String url) {
   return new HttpPostTask(
 		context,
  		url,
 
  	// タスク完了時に呼ばれるUIのハンドラ
 	new HttpPostHandler() {
   	        @Override
 		public void onPostCompleted(String response) {
 		 Log.d("HttpPostHandler", "登録が完了しました。");
                 Intent myIntent = null;
 								
 		//登録されました、というアクティビティへ
 		myIntent = new Intent(context,AccountRegisteredActivity.class);
 		Activity activity = (Activity) context;
 		activity.startActivity(myIntent);
 								
 				}
 			});
 	}

Android 電話番号を取得

Android

Android SDKでスマートフォン自体の電話番号を取得する方法です。

 public String getMyPhoneNumber()
 {
     return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
             .getLine1Number();
 }

また、マニフェストファイル(AndroidManifest.xml)にも、次のように付け加える必要があります。

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

上記がないと、requires read phone state というエラーになってしまいます。

Android 電源ボタンを押すとSurfaceViewがおかしくなる

Android
Android ビデオ録画機能を作る

Android 電源ボタンを押すとSurfaceViewがおかしくなる

Androidのビデオ機能作成に取り組んでいる私ですが(Android ビデオを録画するサンプルコード)、またまた問題が発生しました…。
電源ボタンを押すと、SurfaceViewで表示する録画のプレビュー画面が電源ボタンを押したままの状態で固まってしまうんです。

理由を調べると、なんと電源ボタンを押して、また電源ボタンを押して戻った時は、

 surfaceCreated

が呼ばれない、そして

 surfaceChanged

が呼ばれる順番が違うのでした…。(ちなみに、ある程度の時間放置してスリープになる場合もこれと同様です。)
しかも、これはなんとAndroidの機種によって違うようです!!

  • Galaxys3aではこう
 //電源ボタンを押したとき
 05-26 11:08:43.017: I/MenuActivity(17260): onPause
 05-26 11:08:43.708: I/MenuActivity(17260): onStop
  
 //電源ボタンを押して復帰
 06-24 15:01:30.556: I/MenuActivity(13091): surfaceChanged
 06-24 15:01:30.906: I/MenuActivity(13091): onResume()
 06-24 15:01:31.631: I/MenuActivity(13091): surfaceChanged
  • Xperia SO 04Dではこう
 //電源ボタンを押したとき
 05-26 11:08:43.017: I/MenuActivity(17260): onPause
 05-26 11:08:43.708: I/MenuActivity(17260): onStop
  
 //電源ボタンを押して復帰
 06-24 15:01:30.906: I/MenuActivity(13091): onResume()

普通に最初にアプリ立ち上がり時はこう

 //最初に画面を作る時
 05-26 11:04:30.439: I/MenuActivity(17260): onCreate
 05-26 11:04:51.101: I/MenuActivity(17260): onCreate
 05-26 11:04:51.201: I/MenuActivity(17260): onResume
 05-26 11:04:51.531: I/MenuActivity(17260): surfaceCreated
 05-26 11:04:51.531: I/MenuActivity(17260): surfaceChanged

ちなみに、ホームボタンをタップした時はこう

 //ホームボタン
 05-26 11:09:34.472: I/MenuActivity(17260): onPause
 05-26 11:09:35.073: I/MenuActivity(17260): surfaceDestroyed
 05-26 11:09:35.823: I/MenuActivity(17260): onStop
  
 //ホームボタンから復帰
 05-26 11:09:39.007: I/MenuActivity(17260): onResume
 05-26 11:09:39.277: I/MenuActivity(17260): surfaceCreated
 05-26 11:09:39.277: I/MenuActivity(17260): surfaceChanged

Backボタンを押した時はこう

 //Backボタン
 05-26 11:11:26.822: I/MenuActivity(18100): onPause
 05-26 11:11:27.322: I/MenuActivity(18100): surfaceDestroyed
 05-26 11:11:27.743: I/MenuActivity(18100): onStop
 
 //Backから復帰
 05-26 11:12:08.326: I/MenuActivity(18100): onCreate
 05-26 11:12:08.436: I/MenuActivity(18100): onResume
 05-26 11:12:08.797: I/MenuActivity(18100): surfaceCreated
 05-26 11:12:08.797: I/MenuActivity(18100): surfaceChanged
 05-26 11:12:12.461: I/MenuActivity(18100): onPause

電源ボタンやスリープの場合だけ、surfaceCreatedが呼ばれないんですね(>_<) さて、解決方法というか、StackOverFlowさんによい例が書いてありましたので、紹介します。 http://stackoverflow.com/questions/11495842/how-surfaceholder-callbacks-are-related-to-activity-lifecycle

下手に使うと、カメラが落ちたりします。
原因は、大体

 camera.release();

がカメラ生成前に呼ばれていないことです。

とにかくフラグを使ってなんとかするのは面倒ですし、ソースコードもごちゃごちゃになってくるので避けたいですが、致し方ないですよね。

Good Luck!! [huh]