2016-03-31 13 views
0

アンドロイドのアプリを開発していて、私のアプリにカメラのボタンがあります。以前は、写真を撮ってからonActivityResultの返信データがnullの状態になりました。これはカメラの予想される動作で、EXTRA_OUTPUTをインテントに入れると、nullが返されます。その理由から、私はヌルチェックコードを実行し、それはうまくいった。Androidのカメラが空のインテントを返す

もう一度数日後、私はテストしました。私はまだ同じ問題に再び落ちた。しかし今度はdatanullではありません。 dataintentdata.getData()のように空の意図がありますnullとなります。data.getData() == nullをチェックしてこれを修正してもう一度動作します。私はそれがなぜそうではないのですか?何が起こっていたのか不思議です。そのため私は再度プロダクションにアップロードする必要があります。私はEXTRA_OUTPUTに置けば:-(

//camera intent 
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
takePictureIntent.putExtra("requestCode", Constants.REQUEST_IMAGE_CAPTURE); 

Intent chooseImageIntent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
chooseImageIntent.setType("image/* video/*"); 
chooseImageIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); 
chooseImageIntent.putExtra("requestCode", Constants.REQUEST_CHOOSE_FROM); 

//app can use camera 
if (takePictureIntent.resolveActivity(mContext.getPackageManager()) != null) { 
    //add output file path which camera will save image to 
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Helpers.getOutputMediaFileUri()); 
    //create choose 
    Intent chooser = Intent.createChooser(chooseImageIntent, "Select From"); 
    //add take camera intent as first intent 
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS,new Intent[]{takePictureIntent}); 
    //open up dialog 
    ((Activity) mContext).startActivityForResult(chooser, Constants.REQUEST_CHOOSE_FROM); 
} else { 
    ((Activity) mContext).startActivityForResult(chooseImageIntent, Constants.REQUEST_IMAGE_GALLERY); 
} 

EDITED

私は何を私は理解していないことdataを返すことである。問題を解決するために、どのように私を知っていることはnullでなければなりません。ほとんど重要なこと私は数週間前に実装したコード、私はかなりdata返信nullと突然それはnull値ではないことを確信しています。

+0

'data.getExtras()。get(" data ");'を使用して、 'data.getData()'を使わないでください。 –

+0

私が 'data.getExtras()'を使わない理由は、extra_outputをインテントで渡すと 'data'が' null'になります。それは私が間違っていない場合は事実だ – Sanny

答えて

0
Actually the camera intent doesnot return the data in intent because after getting image it kill the activity. 

so try this 


void opencameraForPicture(int requestCode, Uri fileUri) { 
     checkPermissionForMarshMello(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE); 


     Intent intent = new Intent(Constants.CAMERA_INTERNAL_CLASS); 

     intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
     /* start activity for result pass intent as argument and request code */ 
     startActivityForResult(intent, requestCode); 

    } 

    /** 
    * This method set the path for the captured image from camera for adding 
    * the new picture in the list 
    */ 
    private Uri getOutputMediaFile() { 

     File mediaStorageDir = new File(
       Environment.getExternalStorageDirectory(), "." 
       + Constants.CONTAINER); 

     // Create the storage directory if it does not exist 
     if (!mediaStorageDir.exists()) { 
      mediaStorageDir.mkdirs(); 
     } 

     File mediaFile = new File(mediaStorageDir.getPath() + File.separator 
       + "IMG_" + System.currentTimeMillis() + ".png"); 
     Uri uri = null; 
     if (mediaFile != null) { 
      uri = Uri.fromFile(mediaFile); 

     } 
     return uri; 
    } 

in @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     super.onActivityResult(requestCode, resultCode, data); 

String imagePath = fileUri.getPath(); 

//you can decode this path as bitmap 

} 
+0

答えのためのおかげで@ロヒトしかし、私は私のコードとの違いが表示されません。 'intent'戻りデータが突然非NULL値になる理由を指摘できますか? – Sanny

関連する問題