Blog -
Androidアプリに共有機能などを付ける際に、onCreateでUriを貰って処理を行う
なんて動作を考えたりする、という事でやってみた。
画像をUriで受け取ってUriがNullだったらToastを出して終わらせる。
ACTION_SENDが渡って来たら、外部からの共有で来ている物
そう出なければアプリケーション内から呼び出して物
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.action_send); Uri mUri = null; String action = getIntent().getAction(); if (Intent.ACTION_SEND.equals(action)) { //ACTION_SENDで呼び出し Bundle bundle = getIntent().getExtras(); if (bundle != null) { mUri = (Uri)bundle.get(Intent.EXTRA_STREAM); } intent_flg = true; } else { //アプリケーション内から呼び出し Bundle bundle =getIntent().getExtras(); mUri = (Uri)bundle.get("data"); intent_flg = false; } if(mUri == null ){ if (Intent.ACTION_SEND.equals(action)) { Toast.makeText(getApplicationContext(),"Error", Toast.LENGTH_LONG).show(); finish(); } else { //Uriから画像を読み込み、ImageViewにセットする。 Intent intent = getIntent(); setResult(-1, intent); finish(); } } //UriからBitmap抽出やCopyなど }
もし受け取ったUriがNullだったら、Toastを出すかSetResultでエラーを返して finish()します。
ですが、これを実行するとエラーが発生します。
java.lang.RuntimeException: Unable to start activity
これは何故かというと 、finish()を実行した際にonDestroyが呼ばれた後にまたonCreateに戻り
finish()以降のコードが実行される為です、 onCreateが完了するとonDestroyが呼ばれて実行されます。
つまり、onDestroyはfinish()時にスケジュールされるだけだという事です。
エラーで回避したと思っていたが思わぬ処でエラーが発生しました。
その様な、ライフサイクルなのでメンバ変数などの初期化や扱いも注意しないと。
トラックバック
トラックバックpingアドレス http://three-thread.sakura.ne.jp/tt/modules/d3blog/tb.php/34
参照元
- uggs outlet2014-12-9 19:52
- ...more