Androidアプリ開発 On Createが2回呼ばれる
Androidアプリのマニフェストファイル。
Androidアプリ開発 On Createが2回呼ばれる
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 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
Android ビデオ録画機能を作る
Androidのビデオ機能作成に取り組んでいる私ですが(Android ビデオを録画するサンプルコード)、またまた問題が発生しました…。
電源ボタンを押すと、SurfaceViewで表示する録画のプレビュー画面が電源ボタンを押したままの状態で固まってしまうんです。
理由を調べると、なんと電源ボタンを押して、また電源ボタンを押して戻った時は、
surfaceCreated
が呼ばれない、そして
surfaceChanged
が呼ばれる順番が違うのでした…。(ちなみに、ある程度の時間放置してスリープになる場合もこれと同様です。)
しかも、これはなんとAndroidの機種によって違うようです!!
//電源ボタンを押したとき 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
//電源ボタンを押したとき 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!!