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!! ![[huh]](https://i0.wp.com/oc-technote.com/wp-content/themes/oc/assets/images/face/huh.png?w=525&ssl=1)