0

私のアプリケーションでは、ユーザーがボタンを押すことができるようにしようとしています。これにより、電話のストックカメラアプリケーションを使用して写真を撮ることができます。

Android デベロッパー ガイド (http://developer.android.com/guide/topics/media/camera.html#intent-受け取る)

onActivityResult() メソッドに問題があります。明らかに 3 つのパラメーターを受け取ります。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if(resultCode == RESULT_OK) {
            Log.w("borre","Image saved to:\n" + data.getData());
        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
        }
    }
}

しかし、現時点では、データ Intent が null として返されているため、Intent パラメーターでメソッドを呼び出すと、NullPointerException がスローされます。

カメラアプリケーションを呼び出すために使用しているコードは次のとおりです(基本的にガイドのコードと同じです)

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

Uri fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

誰かがこの問題を抱えているか、このインテントが null として戻ってくる理由を知っていますか?

4

2 に答える 2

4

intent.setDataAndType()Acitivty.likeを開始するときに設定していないデータ部分nullを取得しています

    public static final String IMAGE_UNSPECIFIED = "image/*"; 
    Intent intent = new Intent(Intent.ACTION_PICK, null);  
    intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);  
    startActivityForResult(intent, 3);  

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == 0)  
       return; 
    if (requestCode == 2) {  
       Uri uri=data.getData();  //YOU GET DATA HERE
        }  
//OR
if (requestCode == 3) {  
 Bundle extras = data.getExtras();  
 if (extras != null) {  
 Bitmap photo = extras.getParcelable("data");  
 ByteArrayOutputStream stream = new ByteArrayOutputStream();  
 photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0 - 100)????  
 imageView.setImageBitmap(photo);  
  }  
}  

または、イメージパスを使用する場合は、次のようにします。

if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {  
     //pic path
      File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");  
   } 
于 2012-04-07T17:03:19.550 に答える
0

クラススコープで imageUri = null を宣言します...

以下のコードを使用して試してください::

takephoto.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Calendar cal = Calendar.getInstance();
        File file = new File(Environment.getExternalStorageDirectory(),(cal.getTimeInMillis()+".jpg"));
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {
            file.delete();
            try {
                file.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        imageUri = Uri.fromFile(file);
        Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        i.putExtra(MediaStore.EXTRA_OUTPUT, selectedImageUri);
        startActivityForResult(i, 0);
    }
});

また、ここにonactivityresultメソッドがあります:::

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 0:
            if (resultCode == RESULT_OK) {
                try {
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), imageUri);
                    //imageVIew.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            break;
    }
}
于 2012-04-07T16:53:47.700 に答える