এই বিভাগটি অ্যান্ড্রয়েডে উপলব্ধ বিভিন্ন হ্যাপটিক্স এপিআইগুলির একটি ভূমিকা দেয়৷ আপনার হ্যাপটিক প্রভাবগুলি আপনার ইচ্ছা অনুযায়ী খেলা নিশ্চিত করতে প্রয়োজনীয় ডিভাইস সমর্থনের জন্য কখন এবং কীভাবে পরীক্ষা করবেন তাও এটি কভার করে।
হ্যাপটিক ইফেক্ট তৈরি করার বিভিন্ন উপায় রয়েছে এবং সেগুলির মধ্যে বেছে নেওয়ার সময় Android হ্যাপটিক্স ডিজাইন নীতিগুলি বিবেচনা করা গুরুত্বপূর্ণ। নিম্নলিখিত সারণী প্রতিটি পদ্ধতির এই উচ্চ স্তরের বৈশিষ্ট্যগুলিকে সংক্ষিপ্ত করে:
- আচরণের ফলব্যাক পরিকল্পনা করার সময় উপলব্ধতা বিশেষভাবে গুরুত্বপূর্ণ, এবং পৃথক ডিভাইস সমর্থন চেক করার সাথে একত্রিত করা প্রয়োজন।
- ক্লিয়ার হ্যাপটিক্স হল খাস্তা এবং পরিষ্কার সংবেদন যা ব্যবহারকারীদের জন্য কম বিরক্তিকর।
- রিচ হ্যাপটিক্সের বৃহত্তর অভিব্যক্তি রয়েছে এবং প্রায়শই আরও বৈশিষ্ট্য সমৃদ্ধ হার্ডওয়্যারের প্রয়োজন হয়।
API পৃষ্ঠ | প্রাপ্যতা | পরিষ্কার হ্যাপটিক্স | সমৃদ্ধ হ্যাপটিক্স |
---|---|---|---|
হ্যাপটিক ফিডব্যাক কনস্ট্যান্টস | অ্যান্ড্রয়েড 1.5+ (ধ্রুবক প্রতি) | ||
পূর্বনির্ধারিত ভাইব্রেশন ইফেক্ট | Android 10+ | ||
ভাইব্রেশন ইফেক্ট কম্পোজিশন | Android 11+ (প্রতি ধ্রুবক) | ||
চালু/বন্ধ, এক-শট এবং তরঙ্গরূপ কম্পন | অ্যান্ড্রয়েড 1 |
অতিরিক্তভাবে, এই পৃষ্ঠায় বর্ণিত বিজ্ঞপ্তি APIগুলি , আপনাকে হ্যাপটিক প্রভাবগুলি কাস্টমাইজ করার অনুমতি দেয় যা ইনকামিং বিজ্ঞপ্তিগুলির জন্য প্লে হয়৷
এছাড়াও এই পৃষ্ঠায় বর্ণিত অতিরিক্ত ধারণাগুলি রয়েছে যা API সারফেসগুলিকে বিস্তৃত করে:
- ডিভাইস একটি ভাইব্রেটর আছে?
- প্রশস্ততা নিয়ন্ত্রণ মসৃণ, সমৃদ্ধ হ্যাপটিক প্রভাবের অনুমতি দেয়, কিন্তু সমস্ত ডিভাইস দ্বারা সমর্থিত নয়।
-
VibrationAttributes()
আপনাকে এর ব্যবহারের উপর ভিত্তি করে কম্পনকে শ্রেণীবদ্ধ করতে সাহায্য করে, এটি নিশ্চিত করে যে উপযুক্ত ব্যবহারকারী সেটিংস এতে প্রয়োগ করা হবে এবং এইভাবে ব্যবহারকারীর কাছে বিস্ময় এড়ানো যায়।
HapticFeedbackConstants
HapticFeedbackConstants
ক্লাস অ্যাকশন-ভিত্তিক ধ্রুবক প্রদান করে অ্যাপগুলিকে হ্যাপটিক প্রতিক্রিয়া যোগ করার অনুমতি দেয় যা ডিভাইসের অভিজ্ঞতা জুড়ে সামঞ্জস্যপূর্ণ, প্রতিটি অ্যাপের সাধারণ অ্যাকশনের জন্য ভিন্ন প্রভাবের পরিবর্তে।
সামঞ্জস্য এবং প্রয়োজনীয়তা
এই ধ্রুবকগুলির সাথে View.performHapticFeedback
পদ্ধতি ব্যবহার করার জন্য অ্যাপটির জন্য কোনও বিশেষ অনুমতির প্রয়োজন নেই৷ এটি View.hapticFeedbackEnabled
প্রপার্টির সাপেক্ষে, যা false
সেট করা হলে, ডিফল্ট সহ ভিউতে থাকা সমস্ত হ্যাপটিক ফিডব্যাক কলগুলিকে অক্ষম করে দেবে৷ প্রাথমিক সম্পর্কিত সেটিং View.hapticFeedbackEnabled
প্রপার্টি, যা false
সেট করা হলে সমস্ত হ্যাপটিক ফিডব্যাক কলগুলি নিষ্ক্রিয় করবে৷ ডিফল্ট সহ ভিউতে। পদ্ধতিটি স্পর্শ প্রতিক্রিয়া সক্ষম করার জন্য ব্যবহারকারীর সিস্টেম সেটিংকেও সম্মান করে৷
একমাত্র সামঞ্জস্যের বিবেচনা হল কর্মের জন্য নির্দিষ্ট ধ্রুবকের SDK-স্তর।
HapticFeedbackConstants
ব্যবহার করার সময় ফলব্যাক আচরণ প্রদান করার কোন প্রয়োজন নেই।
HapticsFeedbackConstants
ব্যবহার
HapticFeedbackConstants
ব্যবহার করার বিস্তারিত জানার জন্য, ইভেন্টগুলিতে হ্যাপটিক প্রতিক্রিয়া যোগ করুন দেখুন।
পূর্বনির্ধারিত VibrationEffect
VibrationEffect
ক্লাসটি CLICK
, TICK
এবং DOUBLE_CLICK
এর মতো পূর্বনির্ধারিত ধ্রুবক প্রদান করে। এই প্রভাবগুলি ডিভাইসের জন্য অপ্টিমাইজ করা যেতে পারে।
সামঞ্জস্য এবং প্রয়োজনীয়তা
যেকোনও VibrationEffect
চালানোর জন্য অ্যাপ ম্যানিফেস্টে VIBRATE
অনুমতি প্রয়োজন।
পূর্বনির্ধারিত VibrationEffect
ব্যবহার করার সময় ফলব্যাক আচরণ প্রদান করার কোন প্রয়োজন নেই, কারণ যে ধ্রুবকগুলির ডিভাইস-অপ্টিমাইজ করা বাস্তবায়ন নেই সেগুলি একটি স্ট্যান্ডার্ড প্ল্যাটফর্ম ফলব্যাকে ফিরে আসে।
Vibrator.areEffectsSupported
এবং Vibrator.areAllEffectsSupported
APIগুলি একটি ডিভাইস-অপ্টিমাইজ করা বাস্তবায়ন আছে কিনা তা নির্ধারণ করার জন্য। পূর্বনির্ধারিত প্রভাব এখনও একটি অপ্টিমাইজ করা বাস্তবায়ন ছাড়া ব্যবহার করা যেতে পারে, এবং স্ট্যান্ডার্ড প্ল্যাটফর্ম ফলব্যাক ব্যবহার করে। ফলস্বরূপ, এই areEffectsSupported
API গুলি শুধুমাত্র তখনই প্রয়োজন যখন একটি অ্যাপ্লিকেশন বিবেচনা করতে চায় যে প্রভাবটি ডিভাইসের জন্য অপ্টিমাইজ করা হয়েছে কিনা।
প্রভাব-পরীক্ষা পদ্ধতি তিনটি মানগুলির মধ্যে একটি ফিরিয়ে দিতে পারে:
-
VIBRATION_EFFECT_SUPPORT_YES
নির্দেশ করে যে ডিভাইসটি এই প্রভাবের জন্য অপ্টিমাইজ করা সমর্থন করেছে৷ -
VIBRATION_EFFECT_SUPPORT_NO
নির্দেশ করে যে ডিভাইসটিতে অপ্টিমাইজড সমর্থন নেই, তবে এখনও প্ল্যাটফর্ম ফলব্যাক ব্যবহার করে৷ -
VIBRATION_EFFECT_SUPPORT_UNKNOWN
নির্দেশ করে যে সিস্টেমটি জানে না যে বাস্তবায়নটি অপ্টিমাইজ করা হয়েছে কিনা।
যেহেতু UNKNOWN
মান নির্দেশ করে যে চেকিং API অনুপলব্ধ, এটি সাধারণত সমস্ত প্রভাবের জন্য বা তাদের কোনোটির জন্য ফেরত দেওয়া হয়। এই ডিভাইসগুলি গতিশীলভাবে ফিরে আসে।
পূর্বনির্ধারিত VibrationEffect
ব্যবহার
একটি পূর্বনির্ধারিত VibrationEffect
ব্যবহার করার বিষয়ে বিস্তারিত জানার জন্য, হ্যাপটিক ফিডব্যাক তৈরি করতে একটি পূর্বনির্ধারিত VibrationEffect
ব্যবহার করুন দেখুন।
VibrationEffect
কম্পোজিশন
VibrationEffect
কম্পোজিশন হল VibrationEffect.startComposition
API ব্যবহার করে তৈরি একটি কম্পন প্রভাব। এই API কাস্টমাইজড বিলম্ব এবং তীব্রতার সাথে আদিম ক্রম তৈরি করে অভিব্যক্তিপূর্ণ সমৃদ্ধ হ্যাপটিক্সের অনুমতি দেয়। যাইহোক, একটি অসামঞ্জস্যপূর্ণ সামগ্রিক অভিজ্ঞতা এড়াতে ডিভাইসটি সংযুক্ত বৈশিষ্ট্যগুলিকে সমর্থন করে তা নিশ্চিত করার জন্য বিশেষ যত্ন নিন।
সামঞ্জস্য এবং প্রয়োজনীয়তা
যেকোনও VibrationEffect
চালানোর জন্য অ্যাপ ম্যানিফেস্টে VIBRATE
অনুমতি প্রয়োজন।
সমস্ত ডিভাইস কম্পোজিশন API-এর সমস্ত বৈশিষ্ট্য সমর্থন করে না এবং আদিম উপলব্ধ রয়েছে তা নিশ্চিত করা গুরুত্বপূর্ণ।
কম্পন আদিম সমর্থন জন্য পরীক্ষা করুন
প্রতি-আদিম সমর্থন Vibrator.arePrimitivesSupported
পদ্ধতি ব্যবহার করে পুনরুদ্ধার করা যেতে পারে। বিকল্পভাবে, Vibrator.areAllPrimitivesSupported
পদ্ধতি ব্যবহার করে আদিমগুলির একটি সেট একসাথে চেক করা যেতে পারে - এটি প্রতি-আদিম সমর্থনের AND
-এর সমতুল্য।
VibrationEffect
কম্পোজিশনের ব্যবহার
VibrationEffect
কম্পোজিশনের ব্যবহার সম্পর্কে বিস্তারিত জানার জন্য, কম্পন কম্পোজিশন তৈরি করুন দেখুন।
অন-অফ, এক-শট এবং তরঙ্গরূপ কম্পন
অ্যান্ড্রয়েডে সমর্থিত কম্পনের প্রাচীনতম রূপ হল সাধারণ ভাইব্রেটর অন-অফ প্যাটার্ন যা কনফিগারযোগ্য সময়কাল সহ। এই API গুলি সাধারণত হ্যাপটিক্স ডিজাইনের নীতিগুলির সাথে ভালভাবে সারিবদ্ধ নয় কারণ তারা Buzzy haptics তৈরি করতে পারে; শেষ অবলম্বন ছাড়া তাদের এড়িয়ে চলুন।
অন-অফ ভাইব্রেশনের জন্য সবচেয়ে সাধারণ ব্যবহার হল বিজ্ঞপ্তি, যেখানে, যাই হোক না কেন, কিছু কম্পন কাঙ্খিত। ওয়েভফর্ম কম্পনগুলিও অনন্যভাবে একটি প্যাটার্নকে অনির্দিষ্টকালের জন্য পুনরাবৃত্তি করার অনুমতি দেয়, যেমন আপনি একটি রিংটোনের জন্য কল্পনা করতে পারেন।
একটি এক-শট প্যাটার্ন N মিলিসেকেন্ডের জন্য একবার কম্পন বোঝায়।
দুটি ধরনের তরঙ্গরূপ নিদর্শন আছে:
- টাইমিং-শুধুমাত্র। এই ধরনের তরঙ্গরূপ হল পর্যায়ক্রমে ব্যয় করা সময়কালের বর্ণনা, এবং ব্যয় করা সময়কাল। সময় কাটানো সময়কাল দিয়ে শুরু হয়। ফলস্বরূপ, ওয়েভফর্ম প্যাটার্নগুলি প্রায়শই একটি শূন্য মান দিয়ে শুরু হয় যাতে অবিলম্বে কম্পন শুরু হয়।
- সময় এবং প্রশস্ততা. প্রথম ফর্মের অন্তর্নিহিত অন-অফের পরিবর্তে এই ধরনের তরঙ্গরূপের প্রতিটি টাইমিং চিত্রের সাথে মেলে একটি অতিরিক্ত অ্যামপ্লিটিউড রয়েছে। যাইহোক, এটি পরীক্ষা করা গুরুত্বপূর্ণ যে ডিভাইসটি প্রশস্ততা নিয়ন্ত্রণকে সমর্থন করে তা নিশ্চিত করার জন্য উদ্দেশ্য স্কেলিং অর্জন করা যেতে পারে।
সামঞ্জস্য এবং প্রয়োজনীয়তা
যেহেতু অন-অফ ভাইব্রেশন হল কম্পনের প্রাচীনতম রূপ, তাই এই পৃষ্ঠায় পরে বর্ণিত হিসাবে, একটি ভাইব্রেটর সহ কার্যত সমস্ত ডিভাইসে এগুলি সমর্থিত।
যেকোন VibrationEffect
বা পুরোনো স্টাইলের vibrate
কল চালানোর জন্য অ্যাপ ম্যানিফেস্টে VIBRATE
অনুমতি প্রয়োজন।
একটি তরঙ্গরূপে বিভিন্ন প্রশস্ততা মান ব্যবহার করার সময়, আমরা দৃঢ়ভাবে সুপারিশ করি যে ডিভাইসটি প্রশস্ততা নিয়ন্ত্রণ সমর্থন করে।
প্রশস্ততা নিয়ন্ত্রণ সমর্থন জন্য পরীক্ষা করুন
অ-শূন্য প্রশস্ততার মানগুলি প্রশস্ততা নিয়ন্ত্রণ ছাড়াই ডিভাইসে 100% পর্যন্ত বৃত্তাকার হয়, তাই Vibrator.hasAmplitudeControl
ব্যবহার করে সমর্থন উপস্থিত আছে কিনা তা পরীক্ষা করা গুরুত্বপূর্ণ। আরও বিস্তারিত জানার জন্য প্রশস্ততা নিয়ন্ত্রণ দেখুন।
প্রশস্ততা নিয়ন্ত্রণ ছাড়াই আপনার প্রভাবের যথেষ্ট গুণমান আছে কিনা তা আপনার সাবধানে বিবেচনা করা উচিত। একটি স্পষ্টভাবে ডিজাইন করা অন-অফ ভাইব্রেশনে ফিরে যাওয়া আরও ভাল হতে পারে।
অন-অফ ভাইব্রেশনের ব্যবহার
নতুন SDK স্তরগুলিতে, সমস্ত কম্পন মোডগুলিকে একটি একক অভিব্যক্তিপূর্ণ VibrationEffect
ক্লাসে একত্রিত করা হয়েছিল, যেখানে এই সাধারণ কম্পনগুলি VibrationEffect.createOneshot
বা VibrationEffect.createWaveform
ব্যবহার করে তৈরি করা হয়।
বিজ্ঞপ্তি API
আপনার অ্যাপ বিজ্ঞপ্তিগুলি কাস্টমাইজ করার সময়, আপনি প্রতিটি বিজ্ঞপ্তি চ্যানেলের সাথে একটি প্যাটার্ন সংযুক্ত করতে নিম্নলিখিত APIগুলির মধ্যে একটি ব্যবহার করতে পারেন:
- অ্যান্ড্রয়েডএক্স
- অ্যান্ড্রয়েড
এই সমস্ত ফর্মগুলি একটি প্রাথমিক অন-অফ ওয়েভফর্ম প্যাটার্ন নেয়, যেমনটি আগে বর্ণিত হয়েছে, যেখানে প্রথম এন্ট্রি হল ভাইব্রেটর চালু করার আগে বিলম্ব।
সাধারণ ধারণা
উপরে বর্ণিত API সারফেস জুড়ে বেশ কিছু ধারণা প্রযোজ্য।
ডিভাইস একটি ভাইব্রেটর আছে?
আপনি context.getSystemService(Vibrator.class)
থেকে একটি নন-নাল Vibrator
ক্লাস পেতে পারেন। ডিভাইসে ভাইব্রেটর না থাকলে, ভাইব্রেশন এপিআই-তে কল করার কোনো প্রভাব নেই, তাই অ্যাপগুলিকে তাদের সমস্ত হ্যাপটিক্সকে একটি শর্তে গেট করার দরকার নেই। যাইহোক, যদি প্রয়োজন হয়, একটি অ্যাপ্লিকেশন hasVibrator()
কল করতে পারে এটি একটি আসল ভাইব্রেটর ( true
) নাকি একটি স্টাব ( false
) তা নির্ধারণ করতে।
ব্যবহারকারী কি স্পর্শ হ্যাপটিক্স অক্ষম করেছেন?
কিছু কাস্টম বাস্তবায়নের জন্য ব্যবহারকারী সম্পূর্ণরূপে Android এর টাচ ফিডব্যাক সেটিং অক্ষম করেছে কিনা তা ম্যানুয়ালি চেক করার প্রয়োজন হতে পারে, এই ক্ষেত্রে স্পর্শ প্রতিক্রিয়া প্রভাবগুলিকে দমন করা উচিত। এই সেটিংটি HAPTIC_FEEDBACK_ENABLED
কী ব্যবহার করে জিজ্ঞাসা করা যেতে পারে, যেখানে শূন্যের মান অক্ষম।
কম্পন বৈশিষ্ট্য
ভাইব্রেশন অ্যাট্রিবিউট (বর্তমানে AudioAttributes
আকারে) সিস্টেমকে কম্পনের উদ্দেশ্য সম্পর্কে জানাতে সাহায্য করার জন্য প্রদান করা যেতে পারে। আপনার অ্যাপটি ব্যাকগ্রাউন্ডে থাকাকালীন একটি কম্পন শুরু করার সময় এটি প্রয়োজন হয়, কারণ শুধুমাত্র অ্যাটেনশনাল হ্যাপটিক্স ব্যাকগ্রাউন্ড ব্যবহারের জন্য সমর্থিত।
AudioAttributes
তৈরির বিষয়টি এর ক্লাস ডকুমেন্টেশনে অন্তর্ভুক্ত করা হয়েছে, এবং এটিকে শব্দের পরিবর্তে কম্পন হিসাবে ভাবা উচিত।
একটি নির্দেশিকা হিসাবে, বেশিরভাগ ক্ষেত্রে, বিষয়বস্তুর প্রকার হল CONTENT_TYPE_SONIFICATION
, এবং ব্যবহারটি মান হতে পারে যেমন ফোরগ্রাউন্ডে স্পর্শ প্রতিক্রিয়ার জন্য USAGE_ASSISTANCE_SONIFICATION
, বা পটভূমিতে একটি অ্যালার্মের জন্য USAGE_ALARM
৷ অডিও পতাকা কম্পন উপর কোন প্রভাব আছে.
প্রশস্ততা নিয়ন্ত্রণ
যদি একটি ভাইব্রেটরের প্রশস্ততা নিয়ন্ত্রণ থাকে, তবে এটি বিভিন্ন তীব্রতার সাথে কম্পন চালাতে পারে। এটি সমৃদ্ধ হ্যাপটিক্স উত্পাদনের জন্য একটি গুরুত্বপূর্ণ ক্ষমতা, সেইসাথে ডিফল্ট হ্যাপটিক তীব্রতার ব্যবহারকারীকে সম্ভাব্যভাবে নিয়ন্ত্রণ করার অনুমতি দেয়।
Vibrator.hasAmplitudeControl
কল করে প্রশস্ততা নিয়ন্ত্রণ সমর্থন চেক করা যেতে পারে। যদি একটি ভাইব্রেটরের প্রশস্ততা সমর্থন না থাকে, তবে সমস্ত প্রশস্ততার মানগুলি শূন্য/শূন্য কিনা তার উপর ভিত্তি করে বন্ধ/অন-এ ম্যাপ করা হবে । ফলস্বরূপ, বিভিন্ন প্রশস্ততা সহ সমৃদ্ধ হ্যাপটিক্স ব্যবহার করা অ্যাপ্লিকেশনগুলিকে ডিভাইসে প্রশস্ততা নিয়ন্ত্রণের অভাব থাকলে সেগুলিকে নিষ্ক্রিয় করার বিবেচনা করা উচিত।