ক্যামেরা

আপনি চিত্র এবং ভিডিও ক্যাপচার করতে এবং বিভিন্ন ব্যবহারের ক্ষেত্রে ক্যামেরার পূর্বরূপ স্ট্রীম প্রদর্শন করতে গ্লাস ক্যামেরা ব্যবহার করতে পারেন।

ওভারভিউ

ছবি বা ভিডিও ক্যাপচার করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে:

  • startActivityForResult() এর সাথে অন্তর্নির্মিত ক্যামেরা কার্যকলাপকে কল করা হচ্ছে। সম্ভব হলে এই বিকল্পটি ব্যবহার করুন।
  • অ্যান্ড্রয়েড ক্যামেরা API দিয়ে আপনার নিজস্ব যুক্তি তৈরি করা। আপনি যদি এই পদ্ধতিটি ব্যবহার করেন তবে এই নির্দেশিকাগুলি অনুসরণ করুন:

    • একটি ক্যামেরা বোতাম ক্লিকে একটি ছবি এবং একটি দীর্ঘ ক্লিকে একটি ভিডিও নিন, ঠিক যেমন গ্লাস করে।
    • একটি ছবি তোলা হয়েছে বা একটি ভিডিও রেকর্ড করা হয়েছে কিনা ব্যবহারকারীকে নির্দেশ করুন৷
    • ক্যাপচারের সময় স্ক্রিন অন রাখুন।

গ্লাস সিস্টেমের সাথে ক্যামেরা শেয়ার করা

যদি আপনার গ্লাসওয়্যার ক্যামেরা অ্যাক্সেস করতে অ্যান্ড্রয়েড API ব্যবহার করে, ব্যবহারকারীরা হার্ডওয়্যার ক্যামেরা বোতাম টিপলে সম্ভব হলে সাময়িকভাবে ক্যামেরা ছেড়ে দিন।

  1. আপনার কার্যকলাপে onKeyDown() পদ্ধতিটি ওভাররাইড করুন এবং ক্যামেরা বোতাম টিপগুলি পরিচালনা করতে KEYCODE_CAMERA বাধা দিন।

  2. বিল্ট-ইন গ্লাস ক্যামেরা শুরু হওয়ার জন্য আপনি ইভেন্টটি গ্রাস করেননি তা বোঝাতে ক্যামেরা ছেড়ে দিন এবং false ফেরত দিন।

  1. ইমেজ বা ভিডিও ক্যাপচার হওয়ার পরে, গ্লাস আপনার কার্যকলাপে ফিরে আসে, যেখানে আপনি onResume() এ ক্যামেরাটি পুনরায় দাবি করতে পারেন।

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_CAMERA) {
            // Stop the preview and release the camera.
            // Execute your logic as quickly as possible
            // so the capture happens quickly.
            return false;
        } else {
            return super.onKeyDown(keyCode, event);
        }
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        // Re-acquire the camera and start the preview.
    }
    

ছবি বা ভিডিও ক্যাপচার করা

ছবি

অন্তর্নির্মিত ক্যামেরা গ্লাসওয়্যার ব্যবহার করে একটি ছবি ক্যাপচার করতে:

  1. ACTION_IMAGE_CAPTURE হিসাবে সেট করা অ্যাকশন সহ startActivityForResult(Intent, int) কল করুন।
  2. onActivityResult(int, int, android.content.Intent) :
    1. নিশ্চিত করুন যে requestCode চিত্র ক্যাপচারের অভিপ্রায় শুরু করার সময় ব্যবহৃত অনুরোধ কোডের সাথে মেলে।
    2. resultCode RESULT_OK এর সাথে মেলে তা নিশ্চিত করুন।
    3. প্রয়োজনে EXTRA_THUMBNAIL_FILE_PATH কী দিয়ে Intent এর অতিরিক্ত থেকে ছবির থাম্বনেইলের পথ পান।
    4. সম্পূর্ণ চিত্রের পথটি EXTRA_PICTURE_FILE_PATH কী সহ Intent অতিরিক্ত থেকে উপলব্ধ। যখন ইমেজ ক্যাপচারের অভিপ্রায় আপনার গ্লাসওয়্যারে নিয়ন্ত্রণ ফিরিয়ে দেয়, তখন ছবিটি ফাইলে সম্পূর্ণরূপে লেখা নাও হতে পারে। ইমেজ ফাইলটি বিদ্যমান কিনা তা যাচাই করুন বা এর মূল ডিরেক্টরি নিরীক্ষণ করতে একটি FileObserver ব্যবহার করুন। সম্পূর্ণ চিত্রটি উপলব্ধ হলে, ফাইলটি লোড করুন এবং এটি আপনার গ্লাসওয়্যারে ব্যবহার করুন।
private static final int TAKE_PICTURE_REQUEST = 1;

private void takePicture() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, TAKE_PICTURE_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == TAKE_PICTURE_REQUEST && resultCode == RESULT_OK) {
        String thumbnailPath = data.getStringExtra(Intents.EXTRA_THUMBNAIL_FILE_PATH);
        String picturePath = data.getStringExtra(Intents.EXTRA_PICTURE_FILE_PATH);

        processPictureWhenReady(picturePath);
        // TODO: Show the thumbnail to the user while the full picture is being
        // processed.
    }

    super.onActivityResult(requestCode, resultCode, data);
}

private void processPictureWhenReady(final String picturePath) {
    final File pictureFile = new File(picturePath);

    if (pictureFile.exists()) {
        // The picture is ready; process it.
    } else {
        // The file does not exist yet. Before starting the file observer, you
        // can update your UI to let the user know that the application is
        // waiting for the picture (for example, by displaying the thumbnail
        // image and a progress indicator).

        final File parentDirectory = pictureFile.getParentFile();
        FileObserver observer = new FileObserver(parentDirectory.getPath(),
                FileObserver.CLOSE_WRITE | FileObserver.MOVED_TO) {
            // Protect against additional pending events after CLOSE_WRITE
            // or MOVED_TO is handled.
            private boolean isFileWritten;

            @Override
            public void onEvent(int event, String path) {
                if (!isFileWritten) {
                    // For safety, make sure that the file that was created in
                    // the directory is actually the one that we're expecting.
                    File affectedFile = new File(parentDirectory, path);
                    isFileWritten = affectedFile.equals(pictureFile);

                    if (isFileWritten) {
                        stopWatching();

                        // Now that the file is ready, recursively call
                        // processPictureWhenReady again (on the UI thread).
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                processPictureWhenReady(picturePath);
                            }
                        });
                    }
                }
            }
        };
        observer.startWatching();
    }
}

ভিডিও

অন্তর্নির্মিত ক্যামেরা গ্লাসওয়্যার ব্যবহার করে একটি ভিডিও ক্যাপচার করতে:

  1. ACTION_VIDEO_CAPTURE হিসাবে সেট করা অ্যাকশন সহ startActivityForResult(Intent, int) কল করুন।
  2. onActivityResult(int, int, android.content.Intent) :
    1. ভিডিও ক্যাপচারের অভিপ্রায় শুরু করার সময় requestCode কোডের সাথে রিকোয়েস্ট কোড মেলে তা নিশ্চিত করুন।
    2. resultCode RESULT_OK এর সাথে মেলে তা নিশ্চিত করুন।
    3. প্রয়োজনে একটি পূর্বরূপ প্রদর্শন করতে EXTRA_THUMBNAIL_FILE_PATH কী দিয়ে Intent অতিরিক্ত থেকে ভিডিওর থাম্বনেইলের পথটি পান৷
    4. রেকর্ড করা ভিডিওর পথটি EXTRA_VIDEO_FILE_PATH কী দিয়ে Intent অতিরিক্ত থেকে পাওয়া যায়।