অবচয় নোট ছাড়াই পুরানো এবং নতুন এপিআই সংস্করণ সমর্থন করতে অ্যান্ড্রয়েডের ক্যামেরা বা ক্যামেরা 2 এপিআই কীভাবে ব্যবহার করবেন?


135

নতুন ক্যামেরা 2 এপিআই আমাকে বিভ্রান্ত করে। আমি একটি অ্যাপ্লিকেশন বিকাশ করতে চাই (অ্যান্ড্রয়েড APIs 10 - 21 এর জন্য) যা ডিভাইসের ক্যামেরা ব্যবহার করে। এখানে যেমন বলা হয়েছে , আমার "ক্যামেরা" এপিআই ব্যবহার করা উচিত।

যাইহোক, আমি যখন ম্যানিফেস্টটির ব্যবহারকারীর বৈশিষ্ট্যগুলিতে "ক্যামেরা" এপিআই (android.hardware.Camera) যুক্ত করার চেষ্টা করি তখন এটি অবচয় হিসাবে চিহ্নিত করা হয় । অন্যদিকে, আমি এটিকে "ক্যামেরা 2" এপিআই (android.hardware.camera2) এ পরিবর্তন করতে পারি না কারণ এটি কেবল অ্যান্ড্রয়েড এপিআই 21+ (অ্যান্ড্রয়েড 5 - ললিপপ) এর সাথে সামঞ্জস্যপূর্ণ - তবে এটিও সংযুক্ত করে থাকতে পারে তবে আমি কেবল যুক্ত করতে পারি 2 লিঙ্ক।

আমি চাই না যে আমার অ্যাপটি অ্যান্ড্রয়েডের পুরানো সংস্করণগুলিতে চলুক, তবে এটি একটি নতুনতম ...

উত্তর:


152

যদিও পুরানো ক্যামেরার এপিআইটিকে অবচয় হিসাবে চিহ্নিত করা হয়েছে, এটি এখনও সম্পূর্ণরূপে কার্যকরী, এবং এটি বেশ কিছু সময়ের জন্য থাকবে (প্লে স্টোরের প্রায় সমস্ত ক্যামেরা-ব্যবহার অ্যাপ্লিকেশন বর্তমানে এটি ব্যবহার করে)।

অ্যান্ড্রয়েড স্টুডিওর অভিযোগ নষ্ট হওয়ার বিষয়ে আপনাকে এড়াতে হবে, তবে আপনি যদি 21 এর আগে অ্যান্ড্রয়েড সংস্করণগুলি সমর্থন করতে চান তবে আপনাকে পুরানো এপিআই ব্যবহার করতে হবে।

এপিআই স্তরের ২১ এ আপনি অবশ্যই নতুন এপিআই এবং এর নতুন বৈশিষ্ট্যগুলি ব্যবহার করতে পারবেন তবে আপনি যদি অ্যাপ্লিকেশনগুলির মধ্যে স্যুইচ করেন তবে আপনাকে এখন আপনার অ্যাপ্লিকেশনটিতে সম্পূর্ণ আলাদা প্রবাহ বজায় রাখতে হবে। দুর্ভাগ্যক্রমে, দুটি এপিআই-এর একটি বিশ্বদর্শনের তুলনায় আলাদা আলাদা যে একটি সমর্থন লাইব্রেরি লিখতে আপনার পক্ষে শক্ত এটি আপনাকে পুরানো ডিভাইসে নতুন API এর মতো কিছু ব্যবহার করতে দেয় (যেখানে নতুন API থেকে পুরানো এপিআইতে লাইব্রেরি মানচিত্রগুলি যদি না থাকে তবে এআইপি 21+ এ)।


1
ভাল উত্তর. সুতরাং আপনি যদি এআইপি লেভেল ১ 16 এবং তার বেশি সমর্থন করতে চান তবে আপাতত পুরানো ক্যামেরায় লেগে থাকা ভাল, তাই না?
Looooii

5
সুতরাং একমাত্র উপায় যদি বিবৃতি এবং android.os.Build.VERSION.SDK_INT কোডটি আলাদা করার জন্য ব্যবহার করা হয়?
hadi

সুতরাং কোনও বিকাশকারীর জন্য, আপনি যদি কেবলমাত্র 21 এবং তারপরে এআইপি 21 টার্গেট করছেন তবে ক্যামেরা 2 ব্যবহার করুন তবে আপনার যদি লিগ্যাসি সাপোর্ট ক্যামেরা ব্যবহার প্রয়োজন? অথবা আপনি বিল্ড সংস্করণগুলি সনাক্ত করতে এবং বিভিন্ন এপিআই ব্যবহার করে 2 টি পৃথক পদ্ধতি কোডিং করার পরামর্শ দিবেন?
জন.ওয়েল্যান্ড

2
এটি আপনার অ্যাপ্লিকেশন কী করে তার উপর নির্ভর করে। যদি ক্যামেরার কার্যকারিতাটি সোজাসুজি পয়েন্ট-অ্যান্ড-শ্যুট স্টাফ হয় এবং আপনি পুরানো API গুলি লক্ষ্য করতে চান তবে কেবল পুরানো ক্যামেরা এপিআই ব্যবহার করুন। তবে আপনি যদি কেবল জেপিইজিগুলি দখল এবং পূর্বরূপ আঁকার চেয়ে আরও কিছু করতে চাইছেন বা আপনি যদি কেবল নতুন এপিআই লক্ষ্য করে নিচ্ছেন তবে ক্যামেরা 2 দিয়ে যান। (হার্ড) মাঝখানে এমন অ্যাপ্লিকেশন রয়েছে যা ক্যামেরা 2 এ অভিনব alচ্ছিক বৈশিষ্ট্যগুলি সরবরাহ করতে চায় তবে পুরানো ডিভাইসগুলিতেও কাজ করে। সেখানে, আপনাকে দুটি পৃথক কোডপথ তৈরি করতে হবে, প্রতিটি এপিআইয়ের জন্য একটি।
এডি তালওয়ালা

21
ক্যামেরা এপিআই-কে অবজ্ঞা করা একটি ভুল ছিল, তাদের উচিত ছিল একটি ক্যামেরা অ্যাডভান্সড এপিআই (পুরো উন্নত ক্যামেরা অ্যাপ্লিকেশনগুলির মতো উন্নত অ্যাপ্লিকেশনগুলির জন্য) - অন্যথায় (বেশিরভাগ) অ্যাপ্লিকেশনগুলি যা কেবল ছবি তোলার জন্য ক্যামেরা ব্যবহার করে তাদের 2 এপিএস বজায় রাখতে হবে। গুগলের কমপক্ষে একটি কমপ্যাক্ট লাইব্রেরি চালু করা উচিত (
যথারীতি

38

কোনও ইন্টারফেসে আপনার প্রয়োজনীয় ক্যামেরা থেকে সমস্ত পদ্ধতি রাখুন এবং তারপরে একটি ক্যামেরা উদাহরণ তৈরি করুন

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Log.d(TAG, "camera2 selected");
        this.camera = new Camera2(getContext());
    } else {
        Log.d(TAG, "camera1 selected");
        this.camera = new Camera1(getContext());
    }

এইভাবে আপনার সবকিছু বিভক্ত হবে এবং এটি আপনার জীবনকে আরও সহজ করে তুলবে।

পরামর্শের শব্দ - ক্যামেরা 2 সহ জীবন এত দুর্দান্ত নয়। বিক্রেতারা এখনও বকাঝকা বাস্তবায়ন করে এবং আপনাকে এইভাবে প্রচুর শর্ত এবং কাজের ক্ষেত্র যুক্ত করতে হবে।

উদাহরণ 1 - এস 6 প্রতিবেদন করে যে এটি ফ্ল্যাশ সমর্থন করে না :) উদাহরণ 2 - একটি এলজি ডিভাইস সমর্থিত চিত্রের আকারগুলির একটি তালিকা ফেরত পাঠায় - তবে সেগুলি সবই সমর্থিত নয় !!


14
এটা সত্য. ক্যামেরা 2 এপিআই আসলে ক্যামেরা ডিভাইসগুলিকে তিনটি বিভাগে ভাগ করেছে: লেগ্যাসি, লিমিটেড এবং সম্পূর্ণ F যদি ক্যামেরাটিকে লেগ্যাসি হিসাবে শ্রেণীবদ্ধ করা হয় তবে সমস্ত ক্যামেরা 2 এপিআই কলগুলি হুডের নীচে ক্যামেরা 1 তে অনুবাদ করা হচ্ছে, তাই এটি সত্যিই উদ্বিগ্ন নয়। আমার পরামর্শটি হ'ল CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraID); if (characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)... যদি পুরানো এপিআই সত্য হয় তবে তা কল করুন এবং চয়ন করুন।
পানোনস্কি

9

আপনি চান এপিআই সমর্থন করতে, নীচের কোডটি ব্যবহার করুন। যথাযথ নামগুলি সম্পর্কিত এপিআই স্তরগুলি নির্ধারণ করুন। উদাহরণস্বরূপ, API 21 হ'ল LOLLIPOP, এবং API 15 হ'ল ICE_CREAM_SANDWICH_MR1।

 if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)  
                                    && ((Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP))) {
           // your code here - is between 15-21

 } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
           // your code here - is api 21
 }

33
এটি সম্পূর্ণ ক্যামেরা প্রয়োগের জন্য খুব কমই ব্যবহারিক। প্লাস, এখন আপনাকে দুটি কোডপথ বজায় রাখতে হবে। সংস্করণ পরীক্ষার অ্যান্ড্রয়েড বিকাশে এর ব্যবহার রয়েছে তবে এটি এটি নয়।
katzenhut

5
যদি কোনও ব্যবহারকারী বিল্ড। VERSION_CODES.LOLLIPOP_MR1 চালাচ্ছেন তবে কী ঘটবে? বা তার উপরে কিছু? আমি মনে করি আপনার দ্বিতীয় চেকটি "অন্যথায় যদি (বিল্ড.ভি.এস.এন.কি.ডি.টি.> = বিল্ড। ভার্সন_কোডেস.ললিপপ) হওয়া উচিত"
রাল্ফ পিনা

প্রিয়স, আমার অ্যাপ্লিকেশনগুলি 16 এবং আরও নতুন এপিআইতে কাজ করা উচিত, তবে আমি কীভাবে একই অ্যাপকে ক্যামেরা 2 এবং পুরাতন এপিআই তৈরি করতে পারি? স্বাদ কি এই কাজের জন্য ভাল?
ম্যাটিউস

আপনাকে দুটোই এপিএস প্রয়োগ করতে হবে। কেবল একটি ইন্টারফেস এবং দুটি ক্লাস রাখুন, যেখানে ক্যামেরার কার্যকারিতা কার্যকর করা হয়। ক্যামেরা চালানোর জন্য একটি উদাহরণ তৈরি করার আগে উপরের উল্লিখিত পদ্ধতিটি কল করুন, যাতে কোন শ্রেণি এবং কার্যকারিতা কল করতে হবে তা খুঁজে পেতে পারেন
user0770

3

যদিও, গুগল ক্যামেরা 2 এপিআই> = 21 ব্যবহার করার পরামর্শ দিচ্ছে তবে ম্যানুয়াল সেটিংসে আপনার সমস্যা হতে পারে।

অটো সেটিং মোডের সাথে ফটো তোলার জন্য আপনার যখন অ্যাপ প্রয়োগ করতে হবে তখন এটি ঠিকঠাক কাজ করবে। কিন্ত! ম্যানুয়াল সেটিং মোড প্রয়োগের সাথে অ্যাপ্লিকেশন তৈরি করার প্রয়োজন হলে, এপিআই> = 21 রয়েছে এমন ডিভাইসগুলির জন্য প্রথমে সমর্থিত হার্ডওয়ার লেভেল পরীক্ষা করা দরকার:

ক্যামেরা নির্বাচন করুন (সম্মুখ, চেহারা), এর বৈশিষ্ট্যগুলি পান এবং হার্ডওয়ার লেভেল পরীক্ষা করুন।

mCameraCharacteristics = mCameraManager.getCameraCharacteristics(mCameraId)

val level = mCameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)

ক্যামেরাচার্যাকটিস্টিকসগুলি পরবর্তী সমর্থিত স্তরের প্রতিনিধিত্ব করে: সীমাবদ্ধ, পূর্ণ, লেগ্যাসি, লেভেল_3, বহিরাগত।

উচ্চ স্তরে, স্তরগুলি হ'ল:

LEGACY ডিভাইসগুলি পুরানো অ্যান্ড্রয়েড ডিভাইসের জন্য পিছনের দিকে সামঞ্জস্যতা মোডে পরিচালিত হয় এবং এর সীমাবদ্ধ ক্ষমতাও রয়েছে।

লিমিটেড ডিভাইসগুলি বেসলাইন বৈশিষ্ট্য সেটটিকে উপস্থাপন করে এবং এতে অতিরিক্ত ক্ষমতাগুলিও অন্তর্ভুক্ত থাকতে পারে যা ফুলের সাবসেট হয়।

সম্পূর্ণ ডিভাইসগুলি অতিরিক্তভাবে সেন্সর, ফ্ল্যাশ, লেন্স এবং পোস্ট প্রসেসিং সেটিংসের প্রতি ফ্রেম ম্যানুয়াল নিয়ন্ত্রণ এবং উচ্চ হারে চিত্র ক্যাপচারকে সমর্থন করে।

LEVEL_3 ডিভাইসগুলি অতিরিক্ত আউটপুট স্ট্রিম কনফিগারেশনের পাশাপাশি YUV পুনরায় প্রসেসিং এবং RAW চিত্র ক্যাপচারকে সমর্থন করে।

আপনি পেয়েছেন এমন LEGACY supprot স্তর, আপনি উচিত পুরাতন ক্যামেরা API ব্যবহার



0

Plz পঠন লিঙ্ক ক্যামেরা সংস্করণ সমর্থন তারা জানিয়েছে যে ....
ক্যামেরা এপিআই 1
অ্যান্ড্রয়েড 5.0 কমেছে ক্যামেরা এপিআই 1, যা নতুন প্ল্যাটফর্ম বিকাশ ক্যামেরা API2 তে ফোকাস করার কারণে পর্যায়ক্রমে অবিরত থাকবে। তবে, ফেজ-আউট সময় দীর্ঘ হবে এবং অ্যান্ড্রয়েড প্রকাশগুলি কিছু সময়ের জন্য ক্যামেরা এপিআই 1 অ্যাপ্লিকেশনগুলিকে সমর্থন অবিরত করবে। বিশেষতঃ এর জন্য সমর্থন অব্যাহত থাকে:

  • অ্যাপ্লিকেশনগুলির জন্য ক্যামেরা এপিআই 1 ইন্টারফেস। ক্যামেরা অ্যাপ্লিকেশন 1 এর শীর্ষে নির্মিত ক্যামেরা অ্যাপ্লিকেশানগুলি যেমন পূর্ববর্তী অ্যান্ড্রয়েড রিলিজ সংস্করণগুলি চালিত ডিভাইসগুলিতে করা তেমনই কাজ করে।
  • ক্যামেরা এইচএল সংস্করণ। ক্যামেরা HAL1.0 এর জন্য সমর্থন অন্তর্ভুক্ত।

  • -1

    আমি খুঁজে পেয়েছি সেরা বিকল্পটি দুটি ক্রিয়াকলাপ তৈরি করা। বর্তমান ডিভাইস এপিআই পরীক্ষা করার জন্য সাধারণ উপায় ব্যবহার করুন

    Intent i;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        i = new Intent(context,camera2.class)
    } else {
        i = new Intent(context,camera.class);
    }
    startActivity(i);

    কোডটি ফিরে দেখলে আমার খুব বেশি বিভ্রান্তির দরকার নেই। কোডটি বিচ্ছিন্ন হওয়ার পরে এটি পরিবর্তন করা সহজ।

    আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
    Licensed under cc by-sa 3.0 with attribution required.