Android 无法连接到相机服务

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10100351/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 02:29:13  来源:igfitidea点击:

Android Fail to connect to camera service

android

提问by Piraba

When the user click on Camera, it open next screen after few seconds it throws Fail to connect to camera service

当用户点击相机时,它会在几秒钟后打开下一个屏幕 Fail to connect to camera service

and it say cannot connect to camera

它说 cannot connect to camera

This is my code:

这是我的代码:

   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View viewLoad = LayoutInflater.from(CameraActivity.this).inflate(R.layout.camera, null);
    setContentView(viewLoad);

    Bundle bundle = this.getIntent().getExtras();
    seletctedRetailer = bundle.getString("RetailerName");
    retailerCode = bundle.getString("RetailerCode");

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    Bundle b = new Bundle();
    b.putString("Activity", "RetailerOrderSActivity");
    b.putString("RetailerName", seletctedRetailer);
    b.putString("RetailerCode", retailerCode);

    cameraIntent.putExtras(b);
    getParent().getParent().setTitle("Image Capture");
    startActivityForResult(cameraIntent,CAMERA_PIC_REQUEST);  

    vale +=1;

    Button imgMCancel =(Button)findViewById(R.id.imgMCancel);
    imgMCancel.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent i = new Intent(getBaseContext(), CameraMainActivity.class);
            Bundle bundle = new Bundle(); 
            bundle.putString("Activity", "CameraMainActivity");
            bundle.putString("RetailerName", seletctedRetailer);
            bundle.putString("RetailerCode", retailerCode);
            i.putExtras(bundle);
            View vi = SalesActivityGroup.group.getLocalActivityManager().startActivity("CameraMainActivity", i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
            SalesActivityGroup.group.replaceView(vi);
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == CAMERA_PIC_REQUEST) {
            System.out.println("====YES======");
             Bitmap thumbnail = (Bitmap) data.getExtras().get("data");  
                ImageView image = (ImageView) findViewById(R.id.imageView1);  
                image.setImageBitmap(thumbnail);  
        }
} 

This is my layout :

这是我的布局:

      <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout android:id="@+id/header"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginTop="75dp"
                android:layout_width="fill_parent">


        <Button android:layout_width="wrap_content" 
                android:text="Cancel" 
                android:textColor="#FFFFFF"
                android:background="@drawable/btn_red"
                android:layout_height="wrap_content" 
                android:layout_marginLeft="5dp"
                android:layout_marginRight="150dp"
                android:id="@+id/imgMCancel" 
                >
       </Button>

       <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:id="@+id/buttonClick"
                android:text="Make Photo" 
                android:textColor="#FFFFFF"
                android:background="@drawable/btn_red"
                android:layout_gravity="center">
        </Button>


    </LinearLayout>

This is my AndroidManifest.xml file

这是我的 AndroidManifest.xml 文件

     <activity android:name=".sales.CameraActivity"              android:screenOrientation="landscape"  android:configChanges="orientation|keyboardHidden"  android:clearTaskOnLaunch="false">
        <intent-filter>
            <action android:name="android.media.action.IMAGE_CAPTURE" />
            <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
  </activity>

I did this according to this link http://mobile.tutsplus.com/tutorials/android/android-sdk-quick-tip-launching-the-camera/

我根据这个链接做了这个http://mobile.tutsplus.com/tutorials/android/android-sdk-quick-tip-launching-the-camera/

Please help me what is an issue.My application contain Tab ActivityGroup.

请帮我看看有什么问题。我的应用程序包含 Tab ActivityGroup。

Thanks in advance..

提前致谢..

采纳答案by Akash Singh

Here's my application code -- hope it helps:

这是我的应用程序代码——希望它有帮助:

public class CameraActivity extends Activity {
    ImageView img_logo;
    public static Bitmap bitmap;
    public static  String selectedImagePath="";
    protected boolean _taken;   
    protected static final String PHOTO_TAKEN   = "photo_taken";
    int count = 0;
    static String image1 = "";
    /*static String _path="";
    Bitmap bita;
    ParsingForCabDetails obj_ParsingForCabDetails;
    InputStream is;
    protected boolean _taken;   
    protected static final String PHOTO_TAKEN = "photo_taken";*/
    ProgressDialog pd;
    //ImageView iv;
    Button cancel,Ok;
    String alert="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);

        img_logo = (ImageView) findViewById(R.id.camera_image);
        cancel = (Button) findViewById(R.id.camera_taken);
        upload = (Button) findViewById(R.id.camerabtnupload);

        if(image1.length()<= 0)
        startCameraActivity();

        upload.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                finish();
                if(image1.length() > 0){
                pd = ProgressDialog.show(SmallyTaxiTabbar.tabContext, "", "Loading....");
                new Thread(new Runnable() {

                        public void run() {

                            LoardServer();
                            handler.sendEmptyMessage(0);

                        }
                    }).start();

            }
                else
                    Toast.makeText(getApplicationContext(),"No Capture Image",2000).show();
            }


        });
        img_logo.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                startCameraActivity();  
            }
        });

        cancel.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                finish();
                selectedImagePath= "";
                image1="";
                }
        });


    }


    public void LoardServer() {
    // this is use for upload image or save image   

    }


    private Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            pd.dismiss();
            finish();
            if(alert.length() >0 ){
                Log.d("hello","alert"+alert);
                Toast.makeText(getApplicationContext(),alert, 2000).show();
            }
            else
                FindCabDetails.iv_camera.setImageBitmap(bitmap);

            selectedImagePath= "";
            image1="";

        };
    };
    protected void startCameraActivity() {
        selectedImagePath = Environment.getExternalStorageDirectory() + "/default"+count+".jpg";
        count++;
        File file = new File(selectedImagePath);
        Uri outputFileUri = Uri.fromFile(file);
        Intent intent = new Intent (android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(intent, 0);
        }
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (resultCode) {
        case -1:
        onPhotoTaken();
        break;
        }
        }
        protected void onPhotoTaken() {
        _taken = true;
        bitmap = BitmapFactory.decodeFile(selectedImagePath);
        bitmap = decodeFile();
        image1 = selectedImagePath;
        img_logo.setImageBitmap(bitmap);

        }
        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if (savedInstanceState.getBoolean(PHOTO_TAKEN)) {
        onPhotoTaken();
        }
        }
        @Override
        protected void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(PHOTO_TAKEN, _taken);
        }
        private Bitmap decodeFile() {
        try {
        // decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream( selectedImagePath), null, o);
        final int REQUIRED_SIZE = 70;
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
        if (width_tmp / 2 < REQUIRED_SIZE
        || height_tmp / 2 < REQUIRED_SIZE)
        break;
        width_tmp /= 2;
        height_tmp /= 2;
        scale++;
        }
        // decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new FileInputStream(selectedImagePath), null, o2);
        } catch (FileNotFoundException e) {
        }
        return null;
        }
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if(keyCode==KeyEvent.KEYCODE_BACK)
            {
                finish();
            }
            return super.onKeyDown(keyCode, event);
        }

}

Use this camera.xml

使用这个camera.xml

 <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:background="#FFFFFF" android:layout_height="fill_parent" android:layout_width="fill_parent">
        <RelativeLayout android:id="@+id/relativeLayout1"
            android:layout_width="fill_parent"
            android:background="@drawable/bottoombg" android:layout_height="wrap_content">
            <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true"
                android:layout_centerHorizontal="true" android:textColor="#FBB917"
                android:textStyle="bold" android:textSize="20dip" android:id="@+id/txtCabNametitle" android:text="Camera"></TextView>
            <Button android:layout_alignParentRight="true" android:layout_centerVertical="true"
                android:background="@drawable/filter_btn1"
                android:layout_marginRight="5dip"
                android:layout_height="30dip" android:textColor="#FFFFFF" android:text="Upload" android:layout_width="70dip" android:id="@+id/camerabtnupload"></Button>
            <Button android:layout_centerVertical="true" android:background="@drawable/btn_press_effect" android:layout_height="30dip" android:textColor="#FFFFFF" android:paddingLeft="10dip" android:id="@+id/camera_taken" android:text="Cancel" android:layout_width="70dip"></Button>
        </RelativeLayout>
        <ImageView android:id="@+id/camera_image" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:layout_height="200dip" android:layout_width="200dip"></ImageView>
    </RelativeLayout>

AndroidManifest.xml

AndroidManifest.xml

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

回答by sandkasten

You forgot something in your manifest, look here Camera Class

您忘记了清单中的某些内容,请看这里Camera Class

Add this to your manifest:

将此添加到您的清单中:

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

Hope it helps!

希望能帮助到你!

回答by Suvam Roy

you have to unlock camera before getting preview display and lock camera properly before closing your app. If the camera is not locked properly, next time your app may throw exception. So that, you have to reboot your device...

在关闭应用程序之前,您必须在获得预览显示之前解锁相机并正确锁定相机。如果相机没有正确锁定,下次您的应用程序可能会抛出异常。因此,您必须重新启动设备...