2012-04-11 9 views
11

Wenn der Benutzer, klicken Sie auf die Kamera zu verbinden, es beim nächsten Bildschirm öffnen nach wenigen Sekunden Fail to connect to camera serviceAndroid Fail Kamera Service

wirft und sagen, es cannot connect to camera

Dies ist mein 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); 
     } 
} 

Das ist mein 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> 

Das ist mein AndroidManifest.xml Datei

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

Ich habe dies nach diesem Link http://mobile.tutsplus.com/tutorials/android/android-sdk-quick-tip-launching-the-camera/

Bitte helfen Sie mir, was ist ein issue.My Anwendung enthalten Registerkarte Aktivitätsgruppe.

Vielen Dank im Voraus ..

+0

Ich landete nur das Gerät neu starten und alles hat danach funktioniert. – jwBurnside

Antwort

6

Hier ist meine Anwendungscode - hoffe, es hilft:

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

} 

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

Sie etwas in Ihrem Manifest vergessen, hier Camera Class

dieses Manifest zu Ihrem hinzufügen:

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

Hoffe, es hilft!

+0

Ich gab auch die Erlaubnis. – Piraba

+4

Bitte fügen Sie diese Information zu Ihrer Frage hinzu! In deinem Manifest fehlt die Erlaubnis! – sandkasten

6

Sie haben Kamera zu entsperren bevor Sie die Vorschau anzeigen und die Kamera vor dem Schließen ordnungsgemäß sperren Deine App Wenn die Kamera nicht ordnungsgemäß gesperrt ist, kann die App beim nächsten Mal eine Ausnahme auslösen. Das heißt, Sie müssen Ihr Gerät neu starten ...

+0

Ich verstehe nicht, was bedeutet # richtig gesperrt # ist – Hugo

+0

mCamera = Camera.open(); mCamera.unlock(); und am Ende mCamera.lock(); –

+0

Seit API-Stufe 14 ist die Kamera für Anwendungen in start() automatisch gesperrt. – Hugo