2012-09-24 2 views
3

Я написал приложение, которое должно сделать снимок, а затем отобразить его на экране для внесения изменений. При попытке использовать эмулятор eclipse камера не работает, поэтому я пытаюсь использовать ее на смартфоне Galaxy Nexus Smart.Application Crash при использовании CAMERA - Android

Тем не менее, при запуске на моем SP приложение будет разбиваться, сказав, что it unfortunally stopped working.

При выполнении приложения этого является то, что именно происходит:

  1. я нажимаю на кнопку камеры и интерфейс камеры получает открыт
  2. После съемки он дает мне выбор, чтобы отказаться от него или открыть его
  3. Если я нажимаю на отбрасывать приложение возвращает к нормальному использованию
  4. Если я нажимаю на открытых аварий приложений, как упоминалось выше

Я гугл немного и обнаружил, что вам нужно разрешение на использование аппаратных устройств check here, поэтому я создал файл /etc/udev/rules.d/51-android.rules и это его содержание:

SUBSYSTEM == «USB», ATTR {IDVENDOR} == "18d1", MODE = "0666", GROUP = "plugdev" SUBSYSTEM == "USB", ATTR {IDVENDOR} == "04e8", MODE = "0666", GROUP = "plugdev" SUBSYSTEM == "USB ", ATTR {IDVENDOR} ==" 0bb4 ", MODE =" 0666, "GROUP =" plugdev "

Но все-таки я не смогу использовать камеру.

Вот разрешения я объявляемые в моем файле манифеста:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 

Вот код, который я использую для запуска намерения камеры:

//create new Intent  
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

//get something back from the activity we are starting 
startActivityForResult(cameraIntent, CAMERA_PICTURE_REQUEST); 

И это код для обработки результата :

public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) 
{ 

    if(resultCode == RESULT_OK) 
    { 
     if(requestCode == GALLERY_PICTURE_REQUEST) 
     { 


      selectedImageUri = imageReturnedIntent.getData(); 

      Log.d(TAG, selectedImageUri); 

      Intent intent = new Intent(DVAHLUI_SuperviseActivity.this, DVAHLUI_SelectImageContentActivity.class); 


      intent.setData(selectedImageUri); 
      startActivity(intent); 


     } 

     if(requestCode == CAMERA_PICTURE_REQUEST) 
     { 


      selectedImageUri = imageReturnedIntent.getData(); 
      Log.d(TAG, selectedImageUri); 

      Intent intent = new Intent(DVAHLUI_SuperviseActivity.this, DVAHLUI_SelectImageContentActivity.class); 


      intent.setData(selectedImageUri); 
      startActivity(intent); 


     } 
    } 
} 

Это функция getPath(), вызывающая исключение указателя Java Null:

public String getPath(Uri uri) 
{ 
    String[] filePathColumn = { android.provider.MediaStore.Images.Media.DATA }; 

LINE 343 --> Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null); 
    cursor.moveToFirst(); 

    int columnIndex = cursor.getColumnIndexOrThrow(filePathColumn[0]); 
    String filePath = cursor.getString(columnIndex); 

    cursor.close(); 

    return filePath; 

} 

Не могли бы вы рассказать мне, что случилось?

FOGOT TO POST LogCat:

E/AndroidRuntime(27859): FATAL EXCEPTION: main 
E/AndroidRuntime(27859): java.lang.RuntimeException: Failure delivering result ResultInfo{who=supervise, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.DVA_HLUI/com.DVA_HLUI.DVAHLUI_TabModeActivity}: java.lang.NullPointerException 
E/AndroidRuntime(27859): at android.app.ActivityThread.deliverResults(ActivityThread.java:3141) 
E/AndroidRuntime(27859): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184) 
E/AndroidRuntime(27859): at android.app.ActivityThread.access$1100(ActivityThread.java:130) 
E/AndroidRuntime(27859): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
E/AndroidRuntime(27859): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(27859): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(27859):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
E/AndroidRuntime(27859): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(27859): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(27859): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
E/AndroidRuntime(27859): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
E/AndroidRuntime(27859): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(27859): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(27859): at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1094) 
E/AndroidRuntime(27859): at android.content.ContentResolver.query(ContentResolver.java:354) 
E/AndroidRuntime(27859): at android.content.ContentResolver.query(ContentResolver.java:313) 
E/AndroidRuntime(27859): at com.DVA_HLUI.DVAHLUI_SuperviseActivity.getPath(DVAHLUI_SuperviseActivity.java:343) 
E/AndroidRuntime(27859): at com.DVA_HLUI.DVAHLUI_SuperviseActivity.onActivityResult(DVAHLUI_SuperviseActivity.java:312) 
E/AndroidRuntime(27859): at android.app.ActivityGroup.dispatchActivityResult(ActivityGroup.java:122) 
E/AndroidRuntime(27859): at android.app.ActivityThread.deliverResults(ActivityThread.java:3137) 
E/AndroidRuntime(27859): ... 11 more 
+1

, что это LogCat говоря о проблеме –

+0

@SharathG - нашли что-то интересное, это кажется, что это функция getPath(), вызывающая исключение нулевого указателя java ... можете ли вы мне помочь? thks заранее – Matteo

+0

как-то проверить, имеет ли значение uri значение или нет. Я думаю, что uri doesnot имеет путь, который вызывает nullpointer –

ответ

2

Видимо, это крах из-за известной проблемы Samsung: кажется, что вам нужно создать Uri перед вызовом намерения камеры, таким образом, при запуске onActivityResult метод контент-провайдер будет Allready выделили место, где сохранить ресурс.

За дополнительной информацией проверьте следующее:

и многие другие прибегая к помощи ...

P.S. как можно скорее я отправлю решение, которое сработало для меня.

+0

Я получаю ту же проблему на My Nexus 4, снимая видео на камеру. –

+0

@Matteo благодарит много за объединение этих вопросов вместе, это было действительно полезно. ЕСЛИ возможно, пожалуйста, укажите свой ответ. +1 миллион, если бы я мог –

2

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

0

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

AndroidCameraUtil может быть красивым и простым решением для каждого устройства ниже фрагмент кода можно использовать с библиотекой

private void setupCameraIntentHelper() { 
    mCameraIntentHelper = new CameraIntentHelper(this, new CameraIntentHelperCallback() { 
     @Override 
     public void onPhotoUriFound(Date dateCameraIntentStarted, Uri photoUri, int rotateXDegrees) { 
      messageView.setText(getString(R.string.activity_camera_intent_photo_uri_found) + photoUri.toString()); 

      Bitmap photo = BitmapHelper.readBitmap(CameraIntentActivity.this, photoUri); 
      if (photo != null) { 
       photo = BitmapHelper.shrinkBitmap(photo, 300, rotateXDegrees); 
       ImageView imageView = (ImageView) findViewById(de.ecotastic.android.camerautil.sample.R.id.activity_camera_intent_image_view); 
       imageView.setImageBitmap(photo); 
      } 
     } 

     @Override 
     public void deletePhotoWithUri(Uri photoUri) { 
      BitmapHelper.deleteImageWithUriIfExists(photoUri, CameraIntentActivity.this); 
     } 

     @Override 
     public void onSdCardNotMounted() { 
      Toast.makeText(getApplicationContext(), getString(R.string.error_sd_card_not_mounted), Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onCanceled() { 
      Toast.makeText(getApplicationContext(), getString(R.string.warning_camera_intent_canceled), Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onCouldNotTakePhoto() { 
      Toast.makeText(getApplicationContext(), getString(R.string.error_could_not_take_photo), Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onPhotoUriNotFound() { 
      messageView.setText(getString(R.string.activity_camera_intent_photo_uri_not_found)); 
     } 

     @Override 
     public void logException(Exception e) { 
      Toast.makeText(getApplicationContext(), getString(R.string.error_sth_went_wrong), Toast.LENGTH_LONG).show(); 
      Log.d(getClass().getName(), e.getMessage()); 
     } 
    }); 
} 

@Override 
protected void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    mCameraIntentHelper.onSaveInstanceState(savedInstanceState); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    mCameraIntentHelper.onRestoreInstanceState(savedInstanceState); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 
    mCameraIntentHelper.onActivityResult(requestCode, resultCode, intent); 
} 
} 
Смежные вопросы