2012-04-11 39 views
11

Khi nhấp chuột người dùng trên máy ảnh, nó mở màn hình kế tiếp sau vài giây nó ném Fail to connect to camera serviceAndroid Fail để kết nối với dịch vụ camera

và nó nói cannot connect to camera

Đây là mã của tôi:

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

Đây là bố cục của tôi:

 <?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> 

Đây là tập tin AndroidManifest.xml của tôi

 <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> 

Tôi đã làm điều này theo liên kết này http://mobile.tutsplus.com/tutorials/android/android-sdk-quick-tip-launching-the-camera/

Xin hãy giúp tôi là những gì một ứng dụng issue.My chứa Tab ActivityGroup.

Thanks in advance ..

+0

Tôi vừa mới khởi động lại thiết bị và mọi thứ hoạt động sau đó. – jwBurnside

Trả lời

6

Đây là mã ứng dụng của tôi - hy vọng nó giúp:

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

} 

Sử dụng camera.xml này

<?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" /> 
21

Bạn quên cái gì đó trong biểu hiện của bạn, hãy nhìn đây Camera Class

Thêm phần này vào biểu hiện của bạn:

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

Hy vọng nó sẽ giúp!

+0

Tôi cũng đã cho phép. – Piraba

+4

Vui lòng thêm thông tin này vào câu hỏi của bạn! Trong tệp kê khai của bạn, quyền bị thiếu! – sandkasten

6

bạn phải mở khóa máy ảnh trước khi hiển thị xem trước và khóa máy ảnh đúng cách trước khi đóng ing ứng dụng của bạn. Nếu máy ảnh không bị khóa đúng cách, lần tới ứng dụng của bạn có thể ném ngoại lệ. Vì vậy, bạn phải khởi động lại thiết bị của mình ...

+0

Tôi không hiểu ý nghĩa của #locked right # là – Hugo

+0

mCamera = Camera.open(); mCamera.unlock(); và ở cuối mCamera.lock(); –

+0

Vì cấp API 14, máy ảnh sẽ tự động bị khóa cho các ứng dụng trong start(). – Hugo

Các vấn đề liên quan