We are used Camera functionality in our Application. App will be published in Google App Store also. but we are facing new problem is setParameters failed in our application some devices only like moto g second generation. Please find the error console and SurfaceView coding in below.how to resolve this problem please guide me. Thanks
07-09 11:54:08.460: E/AndroidRuntime(13821): FATAL EXCEPTION: main
07-09 11:54:08.460: E/AndroidRuntime(13821): Process: com.example.surfaceviewtest, PID: 13821
07-09 11:54:08.460: E/AndroidRuntime(13821): java.lang.RuntimeException: setParameters failed
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.hardware.Camera.native_setParameters(Native Method)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.hardware.Camera.setParameters(Camera.java:1962)
07-09 11:54:08.460: E/AndroidRuntime(13821): at com.example.surfaceviewtest.Test.surfaceChanged(Test.java:58)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.SurfaceView.updateWindow(SurfaceView.java:594)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:177)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1119)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6060)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.Choreographer.doCallbacks(Choreographer.java:670)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.Choreographer.doFrame(Choreographer.java:606)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.os.Handler.handleCallback(Handler.java:746)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.os.Handler.dispatchMessage(Handler.java:95)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.os.Looper.loop(Looper.java:148)
07-09 11:54:08.460: E/AndroidRuntime(13821): at android.app.ActivityThread.main(ActivityThread.java:5443)
07-09 11:54:08.460: E/AndroidRuntime(13821): at java.lang.reflect.Method.invoke(Native Method)
07-09 11:54:08.460: E/AndroidRuntime(13821): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
07-09 11:54:08.460: E/AndroidRuntime(13821): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
xml file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffffff"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"
android:orientation="vertical"
android:id="@+id/shareLayout"
>
<FrameLayout
android:id="@+id/FrameLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<com.example.surfaceviewtest.Test
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/weather"
android:orientation="vertical"
android:background="@android:color/transparent"
android:visibility="visible"
>
<!-- android:background="#4FFFFFFF" -->
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="6"
/>
<ImageView
android:id="@+id/imageView1"
android:layout_width="fill_parent"
android:layout_height="453dp"
android:adjustViewBounds="true"
android:background="@android:color/transparent"
android:scaleType="matrix"
android:src="@drawable/ic_launcher" />
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="This is SurfaceView Test"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="Answerofgod.blogspot.kr"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="Answerofgod.tistory.com"
/>
</LinearLayout>
</FrameLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center_horizontal">
<Button
android:id="@+id/share"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="share"
android:gravity="center"
/>
<Button
android:id="@+id/exit"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="explore"
android:gravity="center"
/>
<ToggleButton
android:id="@+id/onOffFlashlight"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:textOn="Turn Off"
android:textOff="Turn On"
android:checked="false"
android:text="Turn On/Off Camera LED/ Flashlight Android" />
</LinearLayout>
</LinearLayout>
Test.java
public class Test extends SurfaceView implements SurfaceHolder.Callback, Camera.PreviewCallback{
SurfaceHolder holder;
Camera cam=null;
int width;
int height;
private Camera.Size mPreviewSize;
public Test(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public Test(Context context) {
super(context);
init();
}
public void init(){
holder=getHolder();
holder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Camera.Parameters myParameters = cam.getParameters();
int wid = ((Activity) getContext()).getWindowManager().getDefaultDisplay().getWidth();
int hei = ((Activity) getContext()).getWindowManager().getDefaultDisplay().getHeight();
System.out.println("wid"+wid);
System.out.println("hei"+hei);
Camera.Size myBestSize = getBestPreviewSize(hei, wid, myParameters);
if(myBestSize != null){
myParameters.setPreviewSize(hei, wid);
cam.setParameters(myParameters);
cam.setDisplayOrientation(90);
cam.startPreview();
// isPreview = true;
}
}
private Camera.Size getBestPreviewSize(int width, int height, Camera.Parameters parameters){
Camera.Size bestSize = null;
List<Camera.Size> sizeList = parameters.getSupportedPreviewSizes();
bestSize = sizeList.get(0);
for(int i = 1; i < sizeList.size(); i++){
if((sizeList.get(i).width * sizeList.get(i).height) >
(bestSize.width * bestSize.height)){
bestSize = sizeList.get(i);
}
}
return bestSize;
}
/*@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
cam.setDisplayOrientation(90);
cam.startPreview();
}*/
@Override
public void surfaceCreated(SurfaceHolder holder) {
cam=Camera.open();
try{
cam.setPreviewDisplay(holder);
cam.setPreviewCallback(this);
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
cam.setPreviewCallback(null);
cam.stopPreview();
cam.release();
cam=null;
}
/*@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
width = resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec);
height = resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec);
}*/
@Override
public void onPreviewFrame(final byte[] data, Camera camera) {
Camera.Parameters params = camera.getParameters();
Camera.Size previewSize = params.getSupportedPreviewSizes().get(0);
int wi = previewSize.width;
//System.out.println("wi======"+wi);
int he = previewSize.height;
//params.setPreviewSize(wi, he);
System.out.println("wi==========="+wi);
System.out.println("he======"+he);
int w = params.getPreviewSize().width;
System.out.println("w=============="+ w);
int h = params.getPreviewSize().height;
System.out.println(" h =============="+ h );
int format = params.getPreviewFormat();
int wid = ((Activity) getContext()).getWindowManager().getDefaultDisplay().getWidth();
int hei = ((Activity) getContext()).getWindowManager().getDefaultDisplay().getHeight();
YuvImage image = new YuvImage(data, format,w, h, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
Rect area = new Rect(0, 0,w, h);
image.compressToJpeg(area, 100, out);
Bitmap bm = BitmapFactory.decodeByteArray(out.toByteArray(), 0, out.size());
Matrix matrix = new Matrix();
matrix.postRotate(90);
//mBitmap = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight()gr
// mtrxFreeze, true);
Bitmap rotatedBitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
//Bitmap rotatedBitmap = Bitmap.createBitmap(bm, 0, 0,w, he, matrix, true);
//System.out.println("shareBitmap getHeight"+rotatedBitmap.getHeight());
//System.out.println("shareBitmap getWidth"+rotatedBitmap.getWidth());
MainActivity.shareBitmap=rotatedBitmap;
}
}
Unfortunately RuntimeException for setParameters method is really generic and does not provide enough info of why it failed. Double check all parameters, one by one with the following command:
parameters.flatten();
try to change the code from :
myParameters.setPreviewSize(hei, wid);
to :
myParameters.setPreviewSize(myBestSize.width, myBestSize.height);
in public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
method
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.