ssummeraw 2013-02-17 06:02 采纳率: 10%
浏览 4997
已采纳

Android 程序不能连接照相机服务

当用户点击相机时,几秒后它会打开下一个屏幕。并且抛出异常Fail to connect to camera servicecannot connect to camera
这是我使用的代码:

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);  
        }
} 

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>

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>

请求大家帮忙看下问题何在。我的应用程序中包含 Tab ActivityGroup。
谢谢!

  • 写回答

2条回答

  • Baby_Bonnie 2013-02-17 09:42
    关注

    我用的下面的方法实现:

    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);
            }
    
    }
    

    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

    <uses-permission android:name="android.permission.CAMERA" />
     <uses-feature android:name="android.hardware.camera" />
     <uses-feature android:name="android.hardware.camera.autofocus" />
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题