11

कोई व्यक्ति मेरे डिवाइस को अनलॉक करने और गलत पासवर्ड दर्ज करने का प्रयास करता है, तो मैं सामने वाले कैमरे के माध्यम से छवि को कैप्चर करने के लिए कार्यक्षमता को कार्यान्वित करना चाहता हूं। मैंने जांच की कि एंड्रॉइड में यह संभव है और कुछ एप्लिकेशन बाजार में भी उपलब्ध हैं।डिवाइस को कैप्चर करते समय डिवाइस को लॉक किया गया है

मैंने इसे प्राप्त करने के लिए कुछ काम किया है लेकिन मुझे एक काला छवि मिल रही है। कोड यह रहा: छवि पर कब्जा और एसडी कार्ड के लिए इसे बचाने के लिए

public class DeviceAdminSample extends DeviceAdminReceiver { 

static Context ctx; 

static SharedPreferences getSamplePreferences(Context context) { 

    ctx = context; 

    return context.getSharedPreferences(
      DeviceAdminReceiver.class.getName(), 0); 
} 

@Override 
public void onPasswordFailed(Context context, Intent intent) { 
    super.onPasswordFailed(context, intent); 

    System.out.println("Password Attempt is Failed..."); 

    Intent i = new Intent(context, CameraView.class); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 

} 

} 

कैमरा कक्षा::

public class CameraView extends Activity implements SurfaceHolder.Callback, 
    OnClickListener { 
private static final String TAG = "CameraTest"; 
Camera mCamera; 
boolean mPreviewRunning = false; 

public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    Log.e(TAG, "onCreate"); 

    setContentView(R.layout.cameraview); 

    mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera); 

    // mSurfaceView.setOnClickListener(this); 

    mSurfaceHolder = mSurfaceView.getHolder(); 
    mSurfaceHolder.addCallback(this); 

    mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    mSurfaceHolder.setKeepScreenOn(true); 

    // mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
} 

protected void onResume() { 
    Log.e(TAG, "onResume"); 
    super.onResume(); 
} 

protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
} 

protected void onStop() { 
    Log.e(TAG, "onStop"); 
    super.onStop(); 
} 

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
    Log.e(TAG, "surfaceChanged"); 

    // XXX stopPreview() will crash if preview is not running 
    if (mPreviewRunning) { 
     mCamera.stopPreview(); 
    } 

    Camera.Parameters p = mCamera.getParameters(); 

    mCamera.setParameters(p); 

    mCamera.startPreview(); 
    mPreviewRunning = true; 
    mCamera.takePicture(null, null, mPictureCallback); 


} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    Log.e(TAG, "surfaceDestroyed"); 
    // mCamera.stopPreview(); 
    // mPreviewRunning = false; 
    // mCamera.release(); 

    stopCamera(); 
} 

private SurfaceView mSurfaceView; 
private SurfaceHolder mSurfaceHolder; 

public void onClick(View v) { 
    mCamera.takePicture(null, mPictureCallback, mPictureCallback); 
} 

public void surfaceCreated(SurfaceHolder holder) { 
    Log.e(TAG, "surfaceCreated"); 

    int i = findFrontFacingCamera(); 

    if (i > 0); 
    while (true) { 
     try { 
      this.mCamera = Camera.open(i); 
      try { 
       this.mCamera.setPreviewDisplay(holder); 
       return; 
      } catch (IOException localIOException2) { 
       stopCamera(); 
       return; 
      } 
     } catch (RuntimeException localRuntimeException) { 
      localRuntimeException.printStackTrace(); 
      if (this.mCamera == null) 
       continue; 
      stopCamera(); 
      this.mCamera = Camera.open(i); 
      try { 
       this.mCamera.setPreviewDisplay(holder); 
       Log.d("HiddenEye Plus", "Camera open RE"); 
       return; 
      } catch (IOException localIOException1) { 
       stopCamera(); 
       localIOException1.printStackTrace(); 
       return; 
      } 

     } catch (Exception localException) { 
      if (this.mCamera != null) 
       stopCamera(); 
      localException.printStackTrace(); 
      return; 
     } 
    } 
} 

private void stopCamera() { 
    if (this.mCamera != null) { 
     /*this.mCamera.stopPreview(); 
     this.mCamera.release(); 
     this.mCamera = null;*/ 
     this.mPreviewRunning = false; 
    } 
} 

private int findFrontFacingCamera() { 
    int i = Camera.getNumberOfCameras(); 
    for (int j = 0;; j++) { 
     if (j >= i) 
      return -1; 
     Camera.CameraInfo localCameraInfo = new Camera.CameraInfo(); 
     Camera.getCameraInfo(j, localCameraInfo); 
     if (localCameraInfo.facing == 1) 
      return j; 
    } 
} 

Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { 

    public void onPictureTaken(byte[] data, Camera camera) { 
     if (data != null) { 
      // Intent mIntent = new Intent(); 
      // mIntent.putExtra("image",imageData); 

      mCamera.stopPreview(); 
      mPreviewRunning = false; 
      mCamera.release(); 

      try { 
       BitmapFactory.Options opts = new BitmapFactory.Options(); 
       Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, 
         data.length, opts); 
       bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false); 
       int width = bitmap.getWidth(); 
       int height = bitmap.getHeight(); 
       int newWidth = 300; 
       int newHeight = 300; 

       // calculate the scale - in this case = 0.4f 
       float scaleWidth = ((float) newWidth)/width; 
       float scaleHeight = ((float) newHeight)/height; 

       // createa matrix for the manipulation 
       Matrix matrix = new Matrix(); 
       // resize the bit map 
       matrix.postScale(scaleWidth, scaleHeight); 
       // rotate the Bitmap 
       matrix.postRotate(-90); 
       Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, 
         width, height, matrix, true); 

       ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
       resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 40, 
         bytes); 

       // you can create a new file name "test.jpg" in sdcard 
       // folder. 
       File f = new File(Environment.getExternalStorageDirectory() 
         + File.separator + "test.jpg"); 

       System.out.println("File F : " + f); 

       f.createNewFile(); 
       // write the bytes in file 
       FileOutputStream fo = new FileOutputStream(f); 
       fo.write(bytes.toByteArray()); 

       // remember close de FileOutput 
       fo.close(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      // StoreByteImage(mContext, imageData, 50,"ImageName"); 
      // setResult(FOTO_MODE, mIntent); 
      setResult(585); 
      finish(); 
     } 
    } 
}; 
} 
+0

क्या फ़ोन अनलॉक होने पर आपने कोड का परीक्षण किया है? –

+0

हाँ फोन अनलॉक होने पर मैं इस कोड के साथ छवि को कैप्चर करने में सक्षम हूं ... –

+0

@ कृष्णाकांतडाल: क्या आपने एंड्रॉइड कंसोल लॉग की जांच की थी। क्या कोई त्रुटि संदेश है? –

उत्तर

6

मैंने आपके कोड का परीक्षण किया है और मुझे एक उचित छवि मिलती है, इसलिए मुझे लगता है कि आपका कैमरा कोड ठीक काम करता है।

आप मेरा कोड here देख सकते हैं। मैंने आपके द्वारा कैमरा व्यू क्लास की प्रतिलिपि बनाई है। डिवाइस व्यवस्थापक भाग मैंने https://github.com/marakana/DevicePolicyDemo से लिया था जब पहला प्रयास विफल होने पर चित्र लिया जाता है।

मुझे संदेह है कि यह किसी प्रकार का हार्डवेयर समस्या हो सकता है। मुझे यकीन नहीं है कि आपने Taking picture from camera without preview देखा है।

दूसरा जवाब उल्लेख करता है कि एक डमी SurfaceView के साथ पूर्वावलोकन को फिक्र करना सभी एंड्रॉइड डिवाइस पर काम नहीं करता है। कृपया उसका blog देखें। उन्होंने विभिन्न फोनों पर परीक्षण किया है। आप मेरी परियोजना का प्रयास कर सकते हैं और यदि यह आपके फोन पर काम नहीं करता है। यह मामला हो सकता है। (अन्य उत्तरों भी आपके लिए उपयोगी हो सकते हैं।)

मैंने सीएम 10 के साथ गैलेक्सी एस 3 पर अपना कोड आजमाया।

उम्मीद है कि इससे मदद मिलती है।

संपादित 1: एचटीसी वन, एचटीसी वन एक्स, सोनी एक्सपीरिया पर परीक्षण किया गया। ठीक काम करता है।

संपादित 2: गैलेक्सी नोट पर काम किया।

+0

धन्यवाद बहुत लूत ... यह वास्तव में सहायक है। मैं पहली बार सैमसंग नेक्सस पर परीक्षण कर रहा था लेकिन बाद में मैंने इसे अन्य उपकरणों की संख्या पर परीक्षण किया और यह सैमसंग नेक्सस को छोड़कर उन सभी पर काम कर रहा है। मैं एलजी नेक्सस, सैमसंग गैलेक्सी टैब 7 'और 10', सैमसंग एसआईआई और सैमसंग एसआईआई पर ऐप का परीक्षण करता हूं। धन्यवाद एक लूत एक बार फिर प्रिय .... –

+0

आपका स्वागत है – pt2121

+0

कृपया मुझे एक एहसान दें, अगर आप इस डिवाइस को अन्य डिवाइस में भी जांचते हैं तो कृपया यहां अपडेट करना जारी रखें ताकि मैं सुनिश्चित हो कि मेरा एप्लिकेशन डिवाइसों की संख्या का समर्थन कर रहा है। –

0

मैं

उपकरण व्यवस्थापक के साथ रजिस्टर गलत पासवर्ड प्रयास के लिए प्रसारण प्राप्त करने के लिए सुनिश्चित नहीं है कि यह अन्य उपकरणों पर काम करेगा, लेकिन अगर ऐसा होता है तो यह हो रहा है कि इसमें क्या हो रहा है।

कैमरा में। पैरामीटर, कच्चे बेयर छवि को सीधे एसडी कार्ड में सहेजने के लिए एक सुविधा है। यह छवि .jpeg फ़ाइल बनाई जाने से पहले होती है, इसलिए यदि ऑपरेटिंग सिस्टम छवि को खाली कर रहा है, तो यह छवि प्रभावित नहीं हो सकती है।

Camera.Parameters parameters=camera.getParameters(); 
    parameters.set("rawsave-mode", "1"); 
    parameters.set("rawfname", "/mnt/sdcard2/test5.raw"); 
    camera.setParameters(parameters); 

यह सुविधा आपके डिवाइस पर काम करता है, तो आप या यदि चित्र लिया जा रहा है और नष्ट निर्धारित करने में सक्षम होना चाहिए, अगर यह बिल्कुल नहीं लिया जा रहा है।

यदि कच्ची छवि काम करती है, तो एक बेयर को आरजीबी छवि या ग्रेस्केल छवि में परिवर्तित करना काफी आसान है।

अन्य क्षेत्र जो मैं देख रहा हूं वह लॉगकट जानकारी है और कोड के अनलॉक संदर्भ और कोड के लॉक संदर्भ के बीच लॉग की तुलना करें। यदि कोई सुरक्षा समस्या है, तो इसे लॉगकैट में प्रतिबिंबित किया जाना चाहिए।

संबंधित मुद्दे