2012-04-11 3 views
11

Когда пользователь нажимает на камеру, он откроется следующий экран через несколько секунд он бросает Fail to connect to camera serviceAndroid Сбой подключения к службе камеры

и сказать cannot 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); 
     } 
} 

Это мой макет:

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

Я сделал это согласно этой ссылке http://mobile.tutsplus.com/tutorials/android/android-sdk-quick-tip-launching-the-camera/

Пожалуйста, помогите мне, что это приложение issue.My содержит Вкладка ActivityGroup.

Заранее спасибо ..

+0

Я закончил просто перезапуск устройства, и после этого все сработало. – jwBurnside

ответ

6

Вот мой код приложения - надеюсь, что это помогает:

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

Вы забыли что-то в своем манифесте, смотрите здесь Camera Class

Добавьте к этому манифесту:

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

Надеется, что это помогает!

+0

Я тоже дал разрешение. – Piraba

+4

Пожалуйста, добавьте эту информацию на ваш вопрос! В вашем манифесте отсутствует разрешение! – sandkasten

6

вы должны разблокировать камеру перед тем, как просмотреть предварительный просмотр и заблокировать камеру, прежде чем закрыть в вашем приложении. Если камера не заблокирована должным образом, в следующий раз ваше приложение может выбросить исключение. Итак, вам нужно перезагрузить устройство ...

+0

Я не понимаю, что значит #блокировано # – Hugo

+0

mCamera = Camera.open(); mCamera.unlock(); и в конце mCamera.lock(); –

+0

Поскольку уровень API 14, камера автоматически блокируется для приложений в start(). – Hugo

Смежные вопросы