2014-09-16 8 views
0

В моем приложении я использую приложение камеры на телефоне, чтобы сделать снимок. После съемки снимок возвращается в мое приложение. Я заметил, что он действует по-разному в разных телефонах. В Galaxy s3 я обнаружил, что после съемки изображения он показывает картинку и дает возможность ее сохранить (а затем вернуться к моему приложению) или отменить (и вернуться к приложению камеры). Проблема в том, что при повороте экрана приложение сокрушится, когда появится экран сохранения/сброса. Единственный способ остановить его от дробления - сделать снимок без поворота экрана и сохранить его таким образом.Android с помощью приложения для камеры

Есть ли решение этой проблемы? Может быть, есть способ, который я могу определить, что он не разрешит поворот на этом экране?

Вот код:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

    //Specify target file 
    Calendar cal = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 

    newPicName = android.os.Environment.getExternalStorageDirectory() + "/"+app.APP_FOLDER + "/" + app.getSession()+ "_"+app.getDateTime()+ "_" +sdf.format(cal.getTime()) +".jpg"; 
    File imageFile = new File(newPicName); 
    Uri imageFileUri = Uri.fromFile(imageFile); 
    intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri); 


    startActivityForResult(intent, 0); 

ответ

0

Если вы просто хотите, чтобы ограничить ориентацию экрана вам нужно указать его в манифесте ... Например:

<activity 
     android:name="com.xxx" 
     android:label="@string/xxx" 
     android:screenOrientation="portrait" > //this limits the screen to only portrait. 
    </activity> 

Дополнительная информация Это как я это делаю, и это отлично работает для меня.

//instance variables 
private static final int   TAKE_PICTURE     = 0; 
private Uri       mUri; 
private Bitmap      mPhoto; 

//First I create a method to capture the image. 
private void captureImage() { 

    Intent i = new Intent("android.media.action.IMAGE_CAPTURE"); 
    File f = new File(Environment.getExternalStorageDirectory(), "profile.jpg"); 
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
    mUri = Uri.fromFile(f); 
    startActivityForResult(i, TAKE_PICTURE); 

} 

//Then I handle the result. 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case TAKE_PICTURE://this is a constant defined in my instance variables. 
     if (resultCode == Activity.RESULT_OK) { 
      getContentResolver().notifyChange(mUri, null); 
      ContentResolver cr = getContentResolver(); 
      try { 
       mPhoto = android.provider.MediaStore.Images.Media.getBitmap(cr, mUri); 
      //set your photo in a screen… 
      } catch (Exception e) { 
       Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 
+0

Это не работает. Я все еще могу повернуть экран. – user2958571

+0

Я нашел, как отключить поворот для всех экранов в моем приложении. Мне жаль, что я не могу контролировать экран save/discard, но похоже, что я не могу – user2958571

0

Попробуйте следующий код:

private File tempFile; 

    private static final int CAMERA_IMAGE = 1; 

    public void takePicFromCamera() { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     if (tempFile != null) { 
      Log.i(""image Path : "", tempFile.getPath()); 
      Uri picUri = Uri.fromFile(tempFile); // convert path to Uri 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, picUri); 
      Log.i("Picture Uri", " : " + picUri); 
     } 
     startActivityForResult(intent, MedicationConstants.CAMERA_IMAGE); 
    } 


    public void onActivityResult(int requestCode, int resultCode, final Intent intent) { 

     if (requestCode == MedicationConstants.CAMERA_IMAGE) { 
      new Handler().postDelayed(new Runnable() { 
            @Override 
            public void run() { 
             if (tempFile != null) { 
              //do anything with image file. Store in database. Or even should add functionality of dropping 
             } 
            } 
      }, 2000); 
     } 

    } 

В на onActivityResult вы должны добавить функциональность обрезке. Пожалуйста, посмотрите на simple-crop-image-lib. Это отличная библиотека & работает практически для всех устройств.

Thanks

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