2 ssummeraw ssummeraw 于 2013.02.17 14:02 提问

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
Baby_Bonnie   2013.02.17 17: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" />
CSDN_Ask
CSDN_Ask   2013.02.27 10:46

在 manifest 文件中添加:

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

请参考:Camera Class

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android案例学习——打开系统照相机
使用Android设备经常需要涉及应用的启动、安装、卸载功能,实现这些功能的组件就是Intent。通过显示意图设置应用的应用名称、包名就可以进行启动程序,通过隐式意图设置动作可以对其他应用进行安装和卸载。 本案例是通过隐式意图打开系统照相机。 activity_mainxml<RelativeLayout xmlns:android="http://schemas.android.com/a
android 照相机 demo
android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo
Xamarin.Android 照相机的使用
这个板块呢,我想展示如何调用照相机,如何保存其路径,然后在我们imageView里面展示 出来 先上最终效果图(用的是Genymotion模拟器) 新键一个Layout,命名为CameraLayout.axml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androi
android照相机
android 照相机 源代码 android 照相机 源代码 android 照相机 源代码 (请注意:模拟器不具备照相机功能,只能用真机测试)
android 无法连接真机调试
当我们进行android开发的过程中,我们会遭遇到一些问题,而有些问题是通用的,使用网上的方法可以解决大部分问题。但是,有一些问题使用网上的解决方案并不能解决。昨天我就碰到了一个。 昨天程序调试过程中,由于一直很卡顿,所以当时就直接强制退出了android studio。结果就头大了,再也没有办法进行真机调试。设备也就无法被识别出来,一般而言我们处理的方法无非是以下几种。 重启手机或电脑,可能
android7.0调用相机拍照的问题解决方案
最近在应用中开发调用系统相机拍照的时候,遇到一个问题,就是在安卓7.0及以上机型使用,按照往常写法Uri.fromFile(imgFile)回抛出异常FileUriExposedException导致程序崩溃。通过上网查看知道了安卓7.0及以上的特殊问题。因此整理了其他的人的处理方法,我也根据自身的项目需要进行了整改,特此奉上,供学习交流!1.在清单文件里添加provider如下:<applicat
在 Android 模拟器中启用摄像头支持
在Android中,默认创建的AVD不能使用照相机.如果你的程序用到了相机API,在模拟器中就不能正常工作.为了使用相机,SD卡必须在模拟器中定义. 在模拟器中打开相机,只需要在AVD’sconfig.inifile中计入如下高亮代码.config.ini文件在 user directory/.android 文件夹下. File: ~/.android/config.ini hw.
Android照相机程序
Android照相机程序,可以导入eclipse,可以运行
关于Excel中的【照相机】功能。(我们通过此功能,可以通过Excel在图片上面画上一些内容后,连同图片和内容一起弄出来)
工具--------》自定义------------------》(工具栏(B),命令(C),选项(O))   选择【命令】这一选项卡,然后在里面选择工具。在这里面就有【照相机】   然后,把它拖拽到工具栏上就行了   对于照相机的说明。        照相机照的是一片区域,所以,要选择一片区域后,点击这个照相机按钮,然在找一个空白区域点击一些就行了。
android调用照相机拍照获取照片并…
1.调用系统的照相机程序 Intent intent = newIntent(MediaStore.ACTION_IMAGE_CAPTURE);  startActivityForResult(intent,TAKE_PHOTO_WITH_DATA); 2.在onActivityResult中处理返回的data final Bitmap photo = data.getParcelableExtr