2011-08-11 21 views
10

Zdjęcie przechwytywania Intent powoduje NullPointerException tylko na telefonach Samsung.Przechwytywanie zdjęć Przyczyna Przyczyna Wyjątek NullPointerException tylko na telefonach Samsung

Realizacja poniżej.

final Button capture = (Button)findViewById(R.id.capture_button); 
capture.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

    } 
}); 


protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_PIC_REQUEST) { 

     Bitmap thumbnail = (Bitmap)data.getExtras().get("data"); 
     ImageView image = (ImageView)findViewById(R.id.photoResultView); 
     image.setImageBitmap(thumbnail); 
    } 
} 
+0

Która linia spowodowała NPE? – Matt

+0

@Matt the image.setImageBitmap (miniatura); linia jako miniatura była pusta –

Odpowiedz

13

Znalazłem poprawkę (nie moja praca), która sprawia, że ​​działa ona na urządzeniach Samsung. Blog z wyjaśnieniem można znaleźć here.

Jednak stosując tę ​​poprawkę na telefony niewyspecjalizowanych Samsung zwraca zły wizerunek, więc chciałbym użyć

if(imageURI != null) { 
    // do it the normal way 
else { 
    // do it the "Samsung" way 
} 
+4

jak @Pyrodante zaproponował "Jednak użycie tej poprawki na telefonach innych niż Samsung zwraca zły obraz, więc użyłbym" może ktoś proszę opublikuj pełny kod, który powinien działać zarówno w telefonie Samsunga, jak i innych – LMK

2

można sprawdzić trochę prosty sposób tutaj, aby uzyskać Uri.

uzyskać ścieżkę do przechwytywania obrazu z kamery w android

nazywając kamera

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(Intent.createChooser(cameraIntent,"Select Picture"), CAMERA_PIC_REQUEST1); 

wynik na działalności

final ContentResolver cr = getContentResolver();  
final String[] p1 = new String[] { 
    MediaStore.Images.ImageColumns._ID, 
    MediaStore.Images.ImageColumns.DATE_TAKEN 
}; 
Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, p1[1] + " DESC");  
if (c1.moveToFirst()) { 
    String uristringpic = "content://media/external/images/media/" +c1.getInt(0); 
    Uri newuri = Uri.parse(uristringpic); 
    Log.i("TAG", "newuri "+newuri);      
} 
c1.close(); 
} 

Następnie można uzyskać Uri przechwytywania obrazu

ścieżka

Get camera capture image path in android

-2

uzyskać ścieżkę do przechwytywania obrazu z kamery w android

nazywając kamera

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(Intent.createChooser(cameraIntent,"Select Picture"), CAMERA_PIC_REQUEST1); 

na aktywność wynik

final ContentResolver cr = getContentResolver();  
final String[] p1 = new String[] { 
    MediaStore.Images.ImageColumns._ID, 
    MediaStore.Images.ImageColumns.DATE_TAKEN 
}; 

Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, p1[1] + " DESC");  
if (c1.moveToFirst()) { 
    String uristringpic = "content://media/external/images/media/" +c1.getInt(0); 
    Uri newuri = Uri.parse(uristringpic); 
    Log.i("TAG", "newuri "+newuri); 
} 
c1.close(); 

następnie można u uzyskać Uri przechwytywania ścieżki obrazu

(source)

+0

Samotny link jest [uważany za słabą odpowiedź] (http://stackoverflow.com/faq#deletion), ponieważ sam w sobie nie ma znaczenia, a zasób docelowy nie jest gwarantowany w przyszłości. Spróbuj podać co najmniej podsumowanie informacji, do których prowadzi link. – j0k

3

Właśnie ten sam problem na Samsung S4 i okazało się, że dodanie configChanges do AndroidManifest.xml rozwiązał problem:

<activity 
    android:name=".YourActivity" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:screenOrientation="portrait" > 
</activity> 
+0

Działa dla mnie! Dziwny Samsung! – Steven

Powiązane problemy