2016-07-08 6 views
1

ギャラリーから写真を選択するか、カメラで新しい写真を撮る必要があるアプリケーションをビルドしています。私は、選択/撮影した写真を1つのアクティビティ、ギャラリーとしてメモリから写真を選択するアクティビティ、カメラで新しい写真を撮る1つのアクティビティを作成しました。私は何をしている:ユーザーがより多くの画像を取得するには、ボタンをクリックしたときに、私はこのような意図チューを開く:APIを使用していないアクティビティを終了するためのsetContent()

Intent galleryIntent = new Intent(Constants.INTENT_GALLERY); 
Intent cameraIntent = new Intent(Constants.INTENT_PHOTO_CAPTURE); 

Intent chooserIntent 
      = Intent.createChooser(galleryIntent, getString(R.string.title_photo_chooser)); 
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { cameraIntent }); 

startActivityForResult(chooserIntent, Constants.SUCCESS); 

そして、そのようなギャラリーやカメラアクティビティ仕上げ:

そして、で、API 16で私のタブレット上で動作しているとき、これは残念ながら、API 22と私の携帯電話上で成功を収めてきた

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (resultCode == RESULT_OK){ 
     if(requestCode == Constants.SUCCESS) { 
      [...] 
     } 
    } 
} 

:最後に、最初のアクティビティ、視聴者は、このような結果を取得します,resultCodeは決してRESULT_OKではなく、intentは常にnullです。私はgetParent().setResult()を呼び出すような多くのソリューションを見てきましたが、何も動作していないようです。

任意のヒントが便利です。ありがとう。私は、デバッガで両方のバージョンでの私の活動の内容を分析した

EDIT

。これらの州はfinish()を呼び出す直前の私のGalleryアクティビティの状態です。 API 16日

mParent = null 
mResultCode = -1 
mResultData = {[email protected]} "Intent { (has extras) }" 
    mAction = null 
    mCategories = null 
    mClipData = null 
    mComponent = null 
    mContentUserHint = -2 
    mData = null 
    mExtras = {[email protected]} "Bundle[{photo=[/storage/emulated/0/DCIM/Camera/....jpg, ...]}]" 
    mFlags = 0 
    mLaunchParams = {[email protected]} "DualScreenLaunchParams { mScreen=UNKNOWN mFlags=0 }" 
    mMultiWindowStyle = null 
    mPackage = null 
    mSelector = null 
    mSourceBounds = null 
    mType = null 
    mWindowMode = 0 
    mWindowPosition = null 
    mWindowScale = 0.0 
    shadow$_klass_ = {[email protected]} "class android.content.Intent" 
    shadow$_monitor_ = -1875875432 

、私はこれを持っている:API 22で、私はこれを持って

mParent = null 
mResultCode = -1 
mResultData = {[email protected]} "Intent { (has extras) }" 
    mAction = null 
    mCategories = null 
    mClipData = null 
    mComponent = null 
    mData = null 
    mExtras = {[email protected]} "Bundle[{photo=[/storage/sdcard0/Pictures/....jpeg, ...]}]" 
    mType = null 
    mPackage = null 
    mSelector = null 
    mSourceBounds = null 
    mFlags = 0 

は違いがありますが、setContent()はその仕事をしたようです。

答えて

0

最後に、私が問題になった前setResultが呼び出されていないことを確認してください。キーはstartActivityForResultdocにありました。

たとえば、起動しているアクティビティがsingleTask起動モードを使用している場合、そのタスクでは実行されず、キャンセル結果がすぐに表示されます。

私は実際に起動モードとしてsingleTaskを使用していました。私はsingleTopに切り替えて、うまくいった。私はすべての作業をするために起動モードを勉強しています。

-1

finish()

+0

上記のように、 'setResult()'は実際に_before_ 'finish()'と呼ばれています。しかし、それはそれを「それ」と呼ぶのは理にかなっていませんか?さらに、私が出会ったすべての答えにおいて、それは常に前に呼ばれています。 – Sunshinator

関連する問題