###前提・実現したいこと
ここに質問したいことを詳細に書いてください
androidアプリで外部のカメラアプリで撮影した画像を取得したいです。
###発生している問題・エラーメッセージ
外部のカメラアプリで撮影した画像を取得できない。
intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, m_uri);
でm_uriがnullになる。
シャッターは動く。
エラーメッセージ ```思うように動かない ###該当のソースコード ```ここに言語を入力 ここにご自身が実行したソースコードを書いてください
private void pickImage(){
//カメラの起動用のIntentの生成
String photoName = System.currentTimeMillis() + ".jpg";
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.TITLE, photoName);
contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
m_uri = getContentResolver()
.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, m_uri);
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
カメラアプリを呼び出す前に、イメージボタンをタップするのですが
その際には、content://media/external/images/media/355995
のようにm_uriに値が入ってきます。
startActivityForResultにきて、カメラアプリを選択し、
写真を撮影すると、onActivityResultの引数のIntent dataはnullとなります。
プログラムの全体をもう少し詳しくお示しします。
ご教授よろしくお願いします。
略
public void onPicButtonTapped(View view){
//パーミッションが許可されているかを判定する
if(ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
}else{ //許可されている場合は、pickImageメソッドを呼び出す // インテントを用いて端末に //保存されている画像を取得する処理を行う pickImage(); } } //インテントを用いてカメラ及び端末に保存されている画像を取得するメソッド private void pickImage(){ //カメラの起動用のIntentの生成 String photoName = System.currentTimeMillis() + ".jpg"; ContentValues contentValues = new ContentValues(); contentValues.put(MediaStore.Images.Media.TITLE, photoName); contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); m_uri = getContentResolver() .insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, m_uri); //ギャラリー用のIntentの生成 Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); //インテントにMIMEタイプを設定する intent.setType("image/*"); // ギャラリー選択のIntent(二つのIntentを一つにまとめたモノ)でcreateChooser() Intent chooserIntent = Intent.createChooser(intent, getString(R.string.pick_image)); // EXTRA_INITIAL_INTENTS にカメラ撮影のIntentを追加 chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {intentCamera}); //画像を選択可能なアプリを起動し、そこで選択した画像を //onActivityResultで受け取る startActivityForResult(chooserIntent.createChooser(chooserIntent, getString(R.string.pick_image)), REQUEST_CODE); } //呼び出し先のアクティビティが終了した時に呼ばれる @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //画像を選択可能なアプリから戻ってきたかの判定を行う if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { //画像を選択可能なアプリから戻ってきた場合は、 Uri uri = (data == null) ? null : data.getData(); //画像が選択されたかの判定 if (uri != null) { try { //Bitmap形式の判定 Bitmap image = MyUtils.getImageFromStream( getContentResolver(), uri); RegistrationActivity.this.image = image; //ImageButtonに画像を設定 ImageButton mDiaryButton= (ImageButton) findViewById(R.id.diary_photo); mDiaryButton.setImageBitmap(image); } catch (IOException e) { e.printStackTrace(); } } } }
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/21 15:11
2017/12/21 16:28