Blog -

カテゴリ : 
Android »
執筆 : 
NickQ 2011-11-21 17:55

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()時にスケジュールされるだけだという事です。

エラーで回避したと思っていたが思わぬ処でエラーが発生しました。

その様な、ライフサイクルなのでメンバ変数などの初期化や扱いも注意しないと。

 

 

 

  • コメント (0)
  • トラックバック (0)
  • 閲覧 (14348)

トラックバック

トラックバックpingアドレス http://three-thread.sakura.ne.jp/tt/modules/d3blog/tb.php/34
参照元
uggs outlet2014-12-9 19:52
...more
cheap uggs 685_3103

コメントの投稿

コメント投稿に関するルール : 登録ユーザ以外のコメントは承認が必要
最新のコメント
  • NickQ(2012/11/19)
  • ゲスト(2012/11/19)
最新のトラックバック
メインメニュー

ログイン
ユーザー名:

パスワード:


SSL パスワード紛失


カテゴリ一覧

アーカイブ

Books