2014-01-29 3 views
2

Я использую этот код, но мой onActivityResult никогда не вызывается. Я использовал запрос без дополнительного намерения сохранить изображение на SD-карте, и это сработало нормально - onActivityResult() получил бы вызов, как я ожидаю. Но так как я добавил код SD-карты - не повезло!onActivityResult не вызывается после снятия фотографии в Android

Я что-то добавил (или пропустил)? В качестве примера я следил за https://stackoverflow.com/a/12277455/2884981.

Вот мой код,

static final int CAPTURE_IMAGE_CALLBACK = 1; 

    private void dispatchTakePictureIntent() 
    { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    File photo = null; 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 

     if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
     { 
      photo = new File(android.os.Environment.getExternalStorageDirectory(), "myapp/images/" + File.separator + timeStamp + ".png"); 
     } 
     else 
     { 
      photo = new File(getCacheDir(), "myapp/images/" + File.separator + timeStamp + ".png"); 
     } 
     if (photo != null) 
     { 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
     } 

     if (takePictureIntent.resolveActivity(getPackageManager()) != null) 
     { 
      startActivityForResult(takePictureIntent, CAPTURE_IMAGE_CALLBACK); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     // This never gets hit! 
     if (requestCode == CAPTURE_IMAGE_CALLBACK) 
     { 
       // etc 

Я просто думал, что я хотел бы добавить, внутри приложения камеры один раз я нажимаю клеща - ничего не происходит. Я несколько раз нажимаю галочку, он просто остается на экране камеры. Контроль никогда не возвращается в основное приложение.

+0

Я ответил на этот вопрос, прежде чем посмотрите: http://stackoverflow.com/a/30266776/1531683 –

ответ

4

мне нужно добавить следующее:

photo.getParentFile().mkdirs(); 
    photo.createNewFile(); 

Я считаю, что причина его терпел неудачу потому, что файл Я пытался написать изображение, которого не было.

+0

Работал для меня !! –

+1

bro, где эти 2 строки кода следует положить? внутри onActivityResult? –

+0

Внутри 'dispatchTakePictureIntent()', я добавил его в поле 'if (photo! = Null)'. – b85411

0

я использую что-то вроде этого, и она отлично работает:

public class MainActivity extends Activity implements OnClickListener { 

Button btnTackPic; 
Bitmap bitMap; 
static int TAKE_PICTURE = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Setup camera ready for picture clicking 

    // add onclick listener to the button 
    btnTackPic.setOnClickListener(this); 

} 

// Take pic 
@Override 
public void onClick(View view) { 

    // create intent with ACTION_IMAGE_CAPTURE action 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    // start camera activity 
    startActivityForResult(intent, TAKE_PICTURE); 

} 

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

    if (requestCode == TAKE_PICTURE && resultCode== RESULT_OK && intent != null){ 
     // get bundle 
     Bundle extras = intent.getExtras(); 

     // get bitmap 
     bitMap = (Bitmap) extras.get("data"); 
    } 
} 

}

+0

Привет. Да, я могу сделать то же самое, только когда я добавляю код SD-карты, в котором я столкнулся с проблемой. И мне нужен код SD-карты для работы, а также чтение данных эскизов, как вы. – b85411

+0

Не следует ли сделать код вашей SD-карты после того, как вы сделали снимок? т.е. переместите этот код в метод onActivityResult, так как вы уверены, что у вас есть фотография для сохранения. –

+0

Нет, вам нужно передать в намерение файл, в который вы хотите сохранить SD-карту. Тогда я верю, что копия фотографии с высоким разрешением будет сохранена в этом файле. Если вы попытаетесь сохранить на SD-карту после того, как вы вернете изображение в onActivityResult, вы останетесь с растровым изображением с низким разрешением/эскизом. (Я считаю, что это так или иначе, я могу подтвердить, как только я получу эту работу !!) – b85411

Смежные вопросы