1

私はオープンなカメラを断片にしたアンドロイドアプリケーションを開発しています。カメラが最初に開かれるときはいつでも。それはおよそ1秒の小さなジャークでロードされます。画面を黒くする。スクリーンがその秒間完全に黒くならないようにする方法。黒い画面なしでAndroidのカメラの開口部を処理する方法

詳細説明:
Facebookのメッセンジャーでカメラを開いたり、携帯電話でカメラを正常に開こうとすると、それは開けるのに1秒かかり、一方スクリーンは黒に変わる。同じことが起こっています。これは防ぐことができますか?どのように?あなたの返信は非常に高く評価されますよね。

以下作業上のコードは上記と同じ問題がありますか?

public class scan extends Fragment implements ZXingScannerView.ResultHandler{ 
 
private ZXingScannerView zXingScannerView; 
 
    private SurfaceView mySurfaceView; 
 
    private QREader qrEader; 
 
    private Camera mCamera; 
 
    private CameraPreview mPreview; 
 
    private String m_Text=""; 
 
    private String number=""; 
 
    
 
    private static final String ARG_PARAM1 = "param1"; 
 
    private static final String ARG_PARAM2 = "param2"; 
 

 
    private String mParam1; 
 
    private String mParam2; 
 

 
    private OnFragmentInteractionListener mListener; 
 

 
    public scan() { 
 
    } 
 
    @Override 
 
    public void handleResult(Result rawResult) { 
 
     
 

 
     Log.e("handler", rawResult.getText()); 
 
     Log.e("handler", rawResult.getBarcodeFormat().toString()); 
 

 
     AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity()); 
 
     builder.setTitle("Scan Result"); 
 
     builder.setMessage(rawResult.getText()); 
 
     number = rawResult.getText().substring(rawResult.getText().length() - 13); 
 

 
     // 
 
     final EditText input = new EditText(this.getActivity()); 
 
    input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
 
     builder.setView(input); 
 

 
     builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
 
      @Override 
 
      public void onClick(DialogInterface dialog, int which) { 
 
       m_Text = input.getText().toString(); 
 

 
      } 
 
     }); 
 
     builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
 
      @Override 
 
      public void onClick(DialogInterface dialog, int which) { 
 
       dialog.cancel(); 
 
      } 
 
     }); 
 

 
     builder.setNegativeButton("NO", 
 
       new DialogInterface.OnClickListener() { 
 
        public void onClick(DialogInterface dialog, int which) { 
 
         dialog.cancel(); 
 
        } 
 
       }); 
 

 
     AlertDialog alert1 = builder.create(); 
 
     alert1.show(); 
 

 

 
     zXingScannerView.resumeCameraPreview(this); 
 
    } 
 

 
    public static scan newInstance(String param1, String param2) { 
 
     scan fragment = new scan(); 
 
     Bundle args = new Bundle(); 
 
     args.putString(ARG_PARAM1, param1); 
 
     args.putString(ARG_PARAM2, param2); 
 
     fragment.setArguments(args); 
 
     return fragment; 
 
    } 
 

 
    @Override 
 
    public void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     if (getArguments() != null) { 
 
      mParam1 = getArguments().getString(ARG_PARAM1); 
 
      mParam2 = getArguments().getString(ARG_PARAM2); 
 
     } 
 

 
     if(checkCameraHardware(getActivity().getApplicationContext())) { 
 
      zXingScannerView = new ZXingScannerView(this.getActivity().getApplicationContext()); 
 
      zXingScannerView.setResultHandler(this); 
 
      zXingScannerView.startCamera(); 
 
     } 
 
    } 
 

 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
 
          Bundle savedInstanceState) { 
 
     View view = inflater.inflate(R.layout.fragment_scan, container, false); 
 

 
     FrameLayout preview =(FrameLayout)view.findViewById(R.id.camera_preview); 
 
     preview.addView(zXingScannerView); 
 

 
     return view; 
 
    } 
 
@Override 
 
public void onPause() 
 
{ 
 
    super.onPause(); 
 
zXingScannerView.stopCamera(); 
 
} 
 
    @Override 
 
    public void onResume() { 
 
     super.onResume(); 
 
     zXingScannerView.setResultHandler(this); // Register ourselves as a handler for scan results. 
 
     zXingScannerView.startCamera();   // Start camera on resume 
 
    } 
 

 
    /** Check if this device has a camera */ 
 
    public boolean checkCameraHardware(Context context) { 
 
     if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){ 
 
      // this device has a camera 
 
      return true; 
 
     } else { 
 
      // no camera on this device 
 
      return false; 
 
     } 
 
    } 
 

 

 
    public void onButtonPressed(Uri uri) { 
 
     if (mListener != null) { 
 
      mListener.onFragmentInteraction(uri); 
 
     } 
 
    } 
 

 
    @Override 
 
    public void onAttach(Context context) { 
 
     super.onAttach(context); 
 
     if (context instanceof OnFragmentInteractionListener) { 
 
      mListener = (OnFragmentInteractionListener) context; 
 
     } else { 
 
      throw new RuntimeException(context.toString() 
 
        + " must implement OnFragmentInteractionListener"); 
 
     } 
 
    } 
 

 
    @Override 
 
    public void onDetach() { 
 

 
     if (mCamera!= null) { 
 
      mCamera.stopPreview(); 
 
      mCamera.release(); 
 
      mCamera = null; 
 
     } 
 
     super.onDetach(); 
 
     mListener = null; 
 
    } 
 

 
    public interface OnFragmentInteractionListener { 
 
     // TODO: Update argument type and name 
 
     void onFragmentInteraction(Uri uri); 
 
    } 
 
}

+0

カメラからのみ画像を選んだのですか? – Nikhil

+0

あなたはこれまでに何を試しましたか? (コード) – Jayanth

+0

はい@nikhilを撮るにはカメラを開く必要があります –

答えて

1

推奨されていないカメラAPIを使用しています。 Lollipop以上の端末でアプリを最高に動作させるには、新しいcamera2 APIに切り替える必要があります。ここの説明を参照してください:Android camera android.hardware.Camera deprecated

新しいAPIを使用するとパフォーマンスが大幅に向上する可能性がありますが、古いAPIを使用している場合は、絶望しないでください。 ZXingScannerViewの最新バージョンを使用していない場合は、このクラスを更新してバックグラウンドスレッドでカメラを開きます。この変更はimprovedの起動が大幅に変わります。

あなたの断片が、(camera preview within viewpagerのような)ViewPagerの一部である場合、ページャは画面にスキャンフラグメントをもたらす前に、カメラのプレビューが開始されていることを確認してください。

他のシナリオでは、スプラッシュ画面パラダイムのバリエーションを使用することをお勧めします。これには長所と短所があります。カメラのプレビューサーフェス上に黒以外の別のビューを短時間表示したり、OpenGLプレビューを使用している場合は事前に定義されたテクスチャを表示できます。

0

カメラを開いて、それが私の作品としての写真をクリックして、コードの下に、これを試してみてください。

public class CameraImage extends Fragment { 

private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 1888; 
Button button; 
ImageView imageView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    final View rootView = inflater.inflate(R.layout.camera_image, 
      container, false); 

    button = (Button) rootView.findViewById(R.id.button); 
    imageView = (ImageView) rootView.findViewById(R.id.imageview); 

    button.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, 
        CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

     } 
    }); 

    return rootView; 

} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
     if (resultCode == Activity.RESULT_OK) { 

      Bitmap bmp = (Bitmap) data.getExtras().get("data"); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 

      bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      byte[] byteArray = stream.toByteArray(); 

      // convert byte array to Bitmap 

      Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, 
        byteArray.length); 

      imageView.setImageBitmap(bitmap); 

     } 
    }   
}  
} 

ご希望の場合はご利用ください。

+0

@Nikhilを見てください私はあなたがこのコードを渡してうれしいです。しかし、これは別の意図でカメラを開いている。私は断片を使用しています。第二に。このコードを使用して..しばらくの間、ジャークがあります。黒い画面の秒または秒未満です。あなたはそれを得ませんでしたか?カメラを開くとき?私はそれを解決する必要があります。私のLOCも見てください。 –

+0

私はそれを見ることができるあなたのポイント@ nirma asadを得る。 – Nikhil

+0

私は待っています。これが長い話し合いになるのであれば、チャットできるのですか? –

関連する問題