I have been trying to implement this code , where i capture a image from the camera and display it in my image viewer and then can set it as a wallpaper. It is working fine in my emulator but on my phone, when i take the image and click ok-it force closes. any help ?
ImageButton ib;
Button b;
ImageView iv;
Intent i;
final static int cameraData = 0;
Bitmap bmp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photo);
initialize();
InputStream is = getResources().openRawResource(R.drawable.icon);
bmp = BitmapFactory.decodeStream(is);
}
private void initialize() {
iv = (ImageView) findViewById(R.id.ivReturnedPic);
ib = (ImageButton) findViewById(R.id.ibTakePic);
b = (Button) findViewById(R.id.bSetWall);
b.setOnClickListener(this);
ib.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.bSetWall:
try {
getApplicationContext().setWallpaper(bmp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case R.id.ibTakePic:
i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, cameraData);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
bmp = (Bitmap) extras.get("data");
iv.setImageBitmap(bmp);
}
}
It is driving me crazy!
Here is the error in the logcat i think,
09-04 09:07:49.034: VERBOSE/com.miui.camera.CameraHolder(7499): camera released
09-04 09:07:49.064: WARN/System.err(7463): java.lang.NullPointerException
09-04 09:07:49.064: WARN/System.err(7463): at com.aradhya.helloandroid.Camera.onActivityResult(Camera.java:72)
09-04 09:07:49.064: WARN/System.err(7463): at android.app.Activity.dispatchActivityResult(Activity.java:3932)
09-04 09:07:49.064: WARN/System.err(7463): at android.app.ActivityThread.deliverResults(ActivityThread.java:2536)
09-04 09:07:49.064: WARN/System.err(7463): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2582)
09-04 09:07:49.074: WARN/System.err(7463): at android.app.ActivityThread.access$2000(ActivityThread.java:117)
09-04 09:07:49.074: WARN/System.err(7463): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
09-04 09:07:49.074: WARN/System.err(7463): at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 09:07:49.094: WARN/System.err(7463): at android.os.Looper.loop(Looper.java:130)
09-04 09:07:49.094: WARN/System.err(7463): at android.app.ActivityThread.main(ActivityThread.java:3694)
09-04 09:07:49.094: WARN/System.err(7463): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 09:07:49.094: WARN/System.err(7463): at java.lang.reflect.Method.invoke(Method.java:507)
09-04 09:07:49.094: WARN/System.err(7463): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
09-04 09:07:49.104: WARN/System.err(7463): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
09-04 09:07:49.104: WARN/System.err(7463): at dalvik.system.NativeStart.main(Native Method)
09-04 09:07:49.204: VERBOSE/com.miui.camera.Camera(7499): stopPreview
09-04 09:07:49.214: ERROR/com.miui.camera.ui.FocusRectangle(7499): clear
09-04 09:07:49.373: VERBOSE/com.miui.camera.Camera(7499): onStop
09-04 09:07:49.383: VERBOSE/com.miui.camera.Camera(7499): onDestroy
Looks like your rom is MIUI (or you are using the MUI camera)
I’m doing some android development with my HTC Desire on MIUI and it looks like the returned intent data from the camera is different to the usual intent data returned from androids native camera; you need to alter the activity result to accept the data from MIUI camera (I’m currently looking into this i will post my solution if I can work it out)
EDIT: Ok I’ve managed to sort the issue after investigating the miui camera intent: the returned data from the MIUI camera contains NO EXTRAS, but does contain a path to the image on the sdcard, so I’ve edited my onActivityResult accordingly to deal with the intent depending on what is in the returned data:
EDIT2: In my app i also have a picker to choose an existing picture from the sd card using the gallery, and have discovered the same problem for the MIUI gallery, so if you stick a image chooser in your app too this code for the onActivityResult works: