এই বিভাগে Android-এ উপলভ্য বিভিন্ন হ্যাপটিক API সম্পর্কে প্রাথমিক তথ্য দেওয়া হয়েছে। এছাড়াও, আপনার হ্যাপ্টিক এফেক্ট যাতে আপনার উদ্দেশ্য অনুযায়ী প্লে হয় তা নিশ্চিত করতে, কখন এবং কীভাবে কোনও ডিভাইসের সাপোর্ট চেক করতে হয় তা এতে অন্তর্ভুক্ত থাকে।
হ্যাপ্টিক এফেক্ট তৈরি করার বিভিন্ন উপায় আছে এবং এগুলির মধ্যে থেকে বেছে নেওয়ার সময় Android হ্যাপ্টিক ডিজাইন সংক্রান্ত নীতি বিবেচনা করা গুরুত্বপূর্ণ। নিচের সারণীতে প্রতিটি পদ্ধতির এই হাই-লেভেল অ্যাট্রিবিউটগুলির সংক্ষিপ্তসার দেওয়া হল:
- বিহেভিয়ার ফলব্যাক প্ল্যান করার সময় উপলভ্যতা বিশেষভাবে গুরুত্বপূর্ণ, এবং এটি আলাদা আলাদা ডিভাইসে কাজ করে কিনা তা চেক করার সাথে একত্রিত করতে হবে।
- স্পষ্ট হ্যাপটিক হল ঝকঝকে ও পরিচ্ছন্ন অনুভূতি যা ব্যবহারকারীদের জন্য কম বিরক্তিকর।
- রিচ হ্যাপটিক আরও বেশি এক্সপ্রেসিভ হয় এবং প্রায়শই আরও ফিচার-রিচ হার্ডওয়্যারের প্রয়োজন হয়।
| API সারফেস | উপলভ্যতা | হ্যাপটিক মুছে দেওয়া | রিচ হ্যাপটিক |
|---|---|---|---|
| HapticFeedbackConstants | Android 1.5+ (প্রতি কনস্ট্যান্ট) |
||
| আগে থেকে নির্দিষ্ট করা VibrationEffect | Android 10+ | ||
VibrationEffect কম্পোজিশন (পছন্দের) |
Android 16+ (26Q4) | ||
VibrationEffect প্রিমটিভ কম্পোজিশন |
Android 11+ (প্রতি কনস্ট্যান্ট) | ||
| চালু/বন্ধ, ওয়ান-শট ও ওয়েভফর্ম ভাইব্রেশন | Android 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 ব্যবহার করুন দেখুন।
Envelope VibrationEffect
এনভেলপ ভিত্তিক ভাইব্রেশন, কন্ট্রোল পয়েন্টের একটি ক্রম নির্ধারণ করে সময়ের সাথে সাথে ভাইব্রেশনের অ্যামপ্লিটিউড
ও ফ্রিকোয়েন্সির উপর নিখুঁত কন্ট্রোল প্রদান করে। এর ফলে
ডেভেলপাররা আরও উন্নত ও সূক্ষ্ম হ্যাপ্টিক ফিডব্যাক অভিজ্ঞতা তৈরি করতে পারেন। BasicEnvelopeBuilder এবং
WaveformEnvelopeBuilder ক্লাস ব্যবহার করে এই
কম্পন তৈরি করা যেতে পারে।
সামঞ্জস্য ও প্রয়োজনীয়তা
যেকোনও ভাইব্রেশন এফেক্ট চালাতে, আপনার অ্যাপকে অবশ্যই অ্যাপ ম্যানিফেস্টে VIBRATE অনুমতি
ঘোষণা করতে হবে।
এনভেলপ এফেক্ট কাজ করে কিনা তা চেক করতে, Vibrator.areEnvelopeEffectsSupported() নম্বরে কল করুন।
প্রাথমিক এনভেলপ বিল্ডার
স্মুথ ও নির্বিঘ্ন হ্যাপ্টিক অভিজ্ঞতা তৈরি করতে, এনভেলপ এফেক্টকে \( 0.0 \)ইনটেনসিটি দিয়ে শুরু ও শেষ করতে হবে। API এটি প্রয়োগ করে, এর জন্য এটি জিরোতে শুরুর ইনটেনসিটি ফিক্স করে এবং শেষের ইনটেনসিটি জিরো না হলে ব্যতিক্রম দেখায়। এই সীমাবদ্ধতা, অ্যামপ্লিটিউডের ডিসকন্টিনিউটি থেকে হওয়া কম্পনের মধ্যে অবাঞ্ছিত ডায়নামিক এফেক্টকে বাধা দেয় যা ব্যবহারকারীর হ্যাপটিক পারসেপশনের উপর নেতিবাচক প্রভাব ফেলতে পারে।
বিভিন্ন ডিভাইস জুড়ে এনভেলপ এফেক্ট রেন্ডার করার ক্ষেত্রে ধারাবাহিকতা বজায় রাখতে, ফ্রেমওয়ার্কের প্রয়োজন হল, এই ফিচার কাজ করে এমন ডিভাইস কন্ট্রোল পয়েন্টের মধ্যে ন্যূনতম ২০ মিলি সেকেন্ডের সময়সীমা এবং এনভেলপ এফেক্টের জন্য অন্তত ১৬টি পয়েন্ট ম্যানেজ করতে পারে।
ওয়েভফর্ম এনভেলপ বিল্ডার
ফ্রেমওয়ার্ক, ডেভেলপারের দেওয়া ফ্রিকোয়েন্সি ও অ্যামপ্লিটিউডের ভ্যালু পরিবর্তন করে না । তবে, API মসৃণ ট্রানজিশন তৈরি করতে শুরু করার অ্যামপ্লিটিউডকেও জিরো করে দেয়।
আপনার অ্যাপের ওয়েভফর্ম এনভেলপ এফেক্ট অপ্টিমাইজ করতে এবং বিভিন্ন ডিভাইস জুড়ে কম্প্যাটিবিলিটি প্রদান করতে, Android গুরুত্বপূর্ণ ডিভাইস ক্যাপাবিলিটি কোয়েরি করার জন্য API প্রদান করে। এইসব পদ্ধতি ডিভাইসের সীমাবদ্ধতা সম্পর্কে তথ্য প্রদান করে, যেমন কন্ট্রোল পয়েন্টগুলির মধ্যে সর্বাধিক ও সর্বনিম্ন ট্রানজিশন ডিউরেশন এবং একটি এফেক্টের জন্য কাজ করে এমন কন্ট্রোল পয়েন্টের সর্বাধিক সংখ্যা:
getMaxSize()- এনভেলপ ইফেক্টের জন্য কাজ করে এমন কন্ট্রোল পয়েন্টের সর্বাধিক সংখ্যা রিট্রিভ করে।
getMinControlPointDurationMillis()- এনভেলপ এফেক্টের মধ্যে দুটি কন্ট্রোল পয়েন্টের মধ্যে মিলিসেকেন্ডে কাজ করে এমন ন্যূনতম সময়সীমা রিট্রিভ করে।
getMaxControlPointDurationMillis()- এনভেলপ এফেক্টের মধ্যে দুটি কন্ট্রোল পয়েন্টের মধ্যে কাজ করে এমন সর্বাধিক সময়সীমা, মিলিসেকেন্ডে, রিট্রিভ করে।
getMaxDurationMillis()- এনভেলপ এফেক্টের জন্য কাজ করে এমন সর্বাধিক সময়সীমা, মিলিসেকেন্ডে রিট্রিভ করে।
কোনও এফেক্ট ডিভাইসের সীমাবদ্ধতা অতিক্রম করলে—যেমন, অনেক বেশি কন্ট্রোল পয়েন্ট ব্যবহার করা বা সর্বাধিক সময়সীমা অতিক্রম করা—ফ্রেমওয়ার্ক অটোমেটিক এফেক্টটি অ্যাডজাস্ট করে অনুমোদিত সীমার মধ্যে ফিট করে নেয়। এই অ্যাডজাস্টমেন্ট প্রসেসটি যতটা সম্ভব ডিজাইনের আসল উদ্দেশ্য ও অনুভূতি বজায় রাখার চেষ্টা করে।
এনভেলপ ভাইব্রেশন এফেক্টের ব্যবহার
এনভেলপ ওয়েভফর্ম এফেক্ট তৈরি করার ব্যাপারে বিস্তারিত জানতে, এনভেলপ সহ ভাইব্রেশন ওয়েভফর্ম তৈরি করুন দেখুন।
VibrationEffect কম্পোজিশন
Android 16 (26Q4) থেকে শুরু করে, ডিজাইন করা টাইমলাইন বরাবর একাধিক হ্যাপ্টিক
এলিমেন্ট সিকোয়েন্স করে সমৃদ্ধ, অভিব্যক্তিপূর্ণ হ্যাপ্টিক এফেক্ট কম্পোজ করার জন্য VibrationEffect.Builder হল পছন্দসই
API। এটি
VibrationEffect.Composition-এর থেকে
উন্নত, কারণ এতে টাইমলাইন অ্যাঙ্কর করা শিডিউলিং, অ্যাটমিক এনক্যাপসুলেশন, মিক্সড ইভেন্ট সাপোর্ট
(প্রিসেট ও এনভেলপ একত্রিত করা) এবং বিল্ট-ইন অটোমেটিক ফলব্যাক আছে।
বিল্ডিং ব্লক
বিল্ডার আপনাকে নিম্নলিখিত হ্যাপ্টিক এলিমেন্টগুলি সিকোয়েন্স করতে দেয়:
VibrationEffect.Preset: আগে থেকে সংজ্ঞায়িত হ্যাপ্টিক সেনসেশন যা সাধারণ ছোট পালসকে বোঝায়, যেমনPRESET_CLICK,PRESET_TICKওPRESET_LOW_TICK। প্রিসেটগুলিVibrationEffect.CompositionAPI থেকে পাওয়া ছোট প্রিমিটিভের থেকে বেশি গুরুত্বপূর্ণ। দীর্ঘ, একটানা বা র্যাম্পিং এফেক্টের (আগে রাইজ, ফল ও অন্যান্য প্রিমিটিভের মাধ্যমে ম্যানেজ করা হত) জন্য, এর পরিবর্তে এনভেলপ (PWLE) ব্যবহার করুন।Preset.create(presetId, scale)ব্যবহার করে প্রিসেটকে0.0fথেকে1.0fপর্যন্ত স্কেল করা যায়।VibrationEffect.Envelope:BasicEnvelopeBuilder(তীব্রতা ও তীক্ষ্ণতা সহ) অথবাWaveformEnvelopeBuilder(ফ্রিকোয়েন্সি ও অ্যামপ্লিচিউড সহ) ব্যবহার করে তৈরি করা পিসওয়াইজ লিনিয়ার এনভেলপ (PWLE)।Envelope.create(builder)ব্যবহার করে এনভেলপ তৈরি করা হয়।VibrationEffect.Event:getEvents()ব্যবহার করে আগে থেকে থাকাVibrationEffectথেকে টাইমলাইন ইভেন্ট পাওয়া গেছে।addEvents(startTimeShiftMillis, events)ব্যবহার করে টাইমলাইন অফসেটের সাথে এগুলি যোগ করা যেতে পারে।
টাইমলাইন শিডিউল করা ও যাচাইকরণ
প্রতিটি এলিমেন্ট বিল্ডারে startTimeMillis সহ যোগ করা হয় যা কম্পোজিশনের শুরু থেকে
টাইম অফসেট (মিলিসেকেন্ডে) দেখায়:
- বিল্ড-টাইম ভ্যালিডেশন: এলিমেন্টগুলিকে তাদের শুরুর সময়ের কঠোরভাবে ক্রমবর্ধমান
ক্রম অনুসারে যোগ করতে হবে। বিল্ডার, ন্যূনতম সময়সীমার (যেমন, প্রিসেটের জন্য ১ মিলি সেকেন্ড বা এনভেলপের জন্য পরিচিত সময়সীমা) সাথে চেক করে
বিল্ড টাইমে যথাসাধ্য ভ্যালিডেশন করে।
বিল্ড করার সময় ওভারল্যাপ শনাক্ত করা হলে, একটি
IllegalArgumentExceptionদেখানো হয়। - প্লেব্যাক টাইমিং অ্যালাইনমেন্ট: প্লেব্যাক চলাকালীন ফ্রেমওয়ার্ক যথাসাধ্য টাইমিং সাপোর্ট প্রদান করে। পরবর্তী শিডিউল করা ইভেন্টের শুরু হওয়ার সময় এসে গেলেও যদি আগের ইভেন্টটি এখনও চলছে, তাহলে ফ্রেমওয়ার্ক অটোমেটিক পরবর্তী ইভেন্টটিকে সবচেয়ে আগে উপলভ্য স্লটে শিফট করে দেয়। এটি ফিজিক্যাল প্লেব্যাকে ইভেন্ট ওভারল্যাপ হওয়া আটকায় এবং কোনও হ্যাপ্টিক ইভেন্ট বাদ না পড়ার গ্যারান্টি দেয়।
রিপিট করা এফেক্ট
setRepeatingEffect(startTimeMillis, repeatingEffect, durationMillis) ব্যবহার করে কম্পোজিশনে রিপিট করা এফেক্ট যোগ করা যেতে পারে।
কোনও
রিপিটিং এফেক্ট কনফিগার করা হয়ে গেলে, বিল্ডারে আর কোনও অতিরিক্ত এলিমেন্ট যোগ করা যাবে না।
ফলব্যাক সহায়তা
VibrationEffect.Builder-এর তৈরি করা ভাইব্রেশনের জন্য ফ্রেমওয়ার্ক-লেভেল অটোমেটিক ফলব্যাক সাপোর্ট ডিফল্ট হিসেবে চালু থাকে:
- স্বচ্ছ প্ল্যাটফর্ম ফলব্যাক: কোনও ডিভাইস যদি
অনুরোধ করা
Presetবা প্রাথমিকEnvelopeসাপোর্ট না করে, তাহলে ফ্রেমওয়ার্ক অটোমেটিক রানটাইমে উপযুক্ত সাপোর্ট করা ভাইব্রেশন দিয়ে সাপোর্ট না করা এলিমেন্টকে পরিবর্তন করে দেয়।VibrationEffect.Builder-এর মাধ্যমে তৈরি কম্পোজিশন চালানোর আগে আপনার অ্যাপকে ডিভাইসের ক্ষমতা (যেমনisPresetSupported) ম্যানুয়ালি চেক করতে হবে না। WaveformEnvelopeBuilder-এর জন্য ব্যতিক্রম:WaveformEnvelopeBuilder-এর তৈরি এনভেলপ এফেক্ট (যা হার্টজে পরম ফিজিক্যাল ফ্রিকোয়েন্সি এবং Gs-এ অ্যামপ্লিটিউড নির্দিষ্ট করে) অটোমেটিক ফলব্যাক সাপোর্ট করে না। কারণ উন্নত PWLE নির্দিষ্ট হার্ডওয়্যার ফ্রিকোয়েন্সি কার্ভের উপর নির্ভর করে (FOAM), সেগুলি অটোমেটিক পরিবর্তন করলে ডিজাইন ইনটেনশনের সাথে আপস করতে হবে। ডিভাইসটি PWLE এফেক্ট বা অনুরোধ করা ফ্রিকোয়েন্সি সাপোর্ট না করলে, এই ধরনের ভাইব্রেশন প্লে হবে না। সর্বজনীন কম্প্যাটিবিলিটির জন্য,BasicEnvelopeBuilderব্যবহার করুন।
VibrationEffect.Builder-এর ব্যবহার
VibrationEffect.Builder-এর মাধ্যমে এফেক্ট কম্পোজ করা সংক্রান্ত কোডের উদাহরণের জন্য, VibrationEffect.Builder-এর মাধ্যমে টাইমলাইন অ্যাঙ্কর করা কম্পোজিশন তৈরি করুন দেখুন।
VibrationEffect প্রিমটিভ কম্পোজিশন
VibrationEffect প্রিমিটিভ কম্পোজিশন হল VibrationEffect.startComposition API ব্যবহার করে তৈরি করা
ভাইব্রেশন এফেক্ট। এই API আপনাকে
প্রিমিটিভের একটি ক্রম তৈরি করতে দেয়।
সামঞ্জস্য ও প্রয়োজনীয়তা
যেকোনও VibrationEffect চালানোর জন্য অ্যাপের
ম্যানিফেস্টে VIBRATE অনুমতি প্রয়োজন।
প্রিমিটিভ সাপোর্ট চেক করা
তাই, VibrationEffect.Composition API ব্যবহার করার সময়, আপনাকে অবশ্যই
Vibrator.arePrimitivesSupported বা
Vibrator.areAllPrimitivesSupported ব্যবহার করে প্রিমিটিভ পিছু সাপোর্ট চেক করে নিতে হবে।
Vibrator.arePrimitivesSupported পদ্ধতি ব্যবহার করে প্রিমিটিভ পিছু সহায়তা পাওয়া যেতে পারে। বিকল্প হিসেবে, Vibrator.areAllPrimitivesSupported
পদ্ধতি ব্যবহার করে
একসাথে একাধিক প্রিমিটিভ চেক করা যেতে পারে - এটি প্রিমিটিভ পিছু সাপোর্ট AND-এর সমতুল্য।
VibrationEffect প্রিমটিভ কম্পোজিশনের ব্যবহার
VibrationEffectপ্রিমিটিভ কম্পোজিশন ব্যবহার করা সম্পর্কে বিস্তারিত জানতে, ভাইব্রেশন প্রিমিটিভ কম্পোজিশন তৈরি করুন দেখুন।
চালু-বন্ধ, ওয়ান-শট ও ওয়েভফর্ম ভাইব্রেশন
Android-এ কাজ করে এমন সবচেয়ে পুরনো ভাইব্রেশন হল কনফিগার করা যায় এমন সময়সীমা সহ সাধারণ ভাইব্রেটর চালু-বন্ধ করার প্যাটার্ন। এইসব API সাধারণত হ্যাপটিক ডিজাইন সংক্রান্ত নীতির সাথে ভালভাবে অ্যালাইন করা থাকে না, কারণ এগুলি বাজি হ্যাপটিক তৈরি করতে পারে; একেবারে শেষ উপায় হিসেবে ছাড়া এগুলি এড়িয়ে চলুন।
চালু-বন্ধ ভাইব্রেশনের সবচেয়ে সাধারণ ব্যবহার হল বিজ্ঞপ্তি, যেখানে, যাই হোক না কেন, কিছু ভাইব্রেশন প্রয়োজন। ওয়েভফর্ম ভাইব্রেশনও অনন্যভাবে কোনও প্যাটার্নকে অনির্দিষ্টকালের জন্য রিপিট করার অনুমতি দেয়, যেমনটি আপনি রিংটোনের ক্ষেত্রে কল্পনা করতে পারেন।
ওয়ান-শট প্যাটার্ন বলতে N মিলিসেকেন্ডের জন্য একবার ভাইব্রেট করাকে বোঝায়।
ওয়েভফর্ম প্যাটার্ন দুই ধরনের হয়:
- শুধুমাত্র সময়। এই ধরনের ওয়েভফর্ম হল, কতক্ষণ বন্ধ এবং কতক্ষণ চালু ছিল তার বিবরণ। টাইমিং শুরু হয় বন্ধ থাকার সময়কাল দিয়ে। ফলে, ওয়েভফর্ম প্যাটার্ন প্রায়ই শূন্য মান দিয়ে শুরু হয় যাতে অবিলম্বে ভাইব্রেট করা শুরু করা যায়।
- সময় ও তীব্রতা। এই ধরনের ওয়েভফর্মে প্রতিটি টাইমিং ফিগারের সাথে ম্যাচ করানোর জন্য অতিরিক্ত অ্যামপ্লিটিউডের অ্যারে থাকে, প্রথম ফর্মের ইমপ্লিসিট অন-অফ থাকে না। তবে, এটি চেক করা গুরুত্বপূর্ণ যে ডিভাইসটি অ্যামপ্লিটিউড কন্ট্রোল সমর্থন করে কিনা যাতে নিশ্চিত করা যায় যে উদ্দেশ্য অনুযায়ী স্কেলিং অর্জন করা যেতে পারে।
সামঞ্জস্য ও প্রয়োজনীয়তা
যেহেতু অন-অফ ভাইব্রেশন হল ভাইব্রেশনের সবচেয়ে পুরনো ফর্ম, তাই এগুলি ভাইব্রেটর আছে এমন প্রায় সব ডিভাইসে কাজ করে, যেমনটি এই পৃষ্ঠায় পরে বর্ণনা করা হয়েছে।
যেকোনও VibrationEffect বা পুরনো স্টাইলের vibrate কল চালানোর জন্য, অ্যাপ ম্যানিফেস্টে
VIBRATE অনুমতি প্রয়োজন।
ওয়েভফর্মে আলাদা আলাদা অ্যামপ্লিটিউড ভ্যালু ব্যবহার করার সময়, আমরা আপনাকে দৃঢ়ভাবে সাজেস্ট করি যে ডিভাইসটি অ্যামপ্লিটিউড কন্ট্রোল সমর্থন করে।
অ্যামপ্লিটিউড কন্ট্রোল কাজ করে কিনা চেক করা
অ্যামপ্লিটিউড কন্ট্রোল নেই এমন ডিভাইসে শূন্য নয় এমন অ্যামপ্লিটিউড ভ্যালু ১০০% পর্যন্ত রাউন্ড অফ করা হয়, তাই
Vibrator.hasAmplitudeControl ব্যবহার করে সাপোর্ট আছে কিনা তা চেক করা গুরুত্বপূর্ণ। আরও বিবরণের জন্য অ্যামপ্লিটিউড কন্ট্রোল
দেখুন।
অ্যামপ্লিটিউড কন্ট্রোল না থাকলে আপনার এফেক্টের কোয়ালিটি যথেষ্ট ভালো হবে কিনা তা আপনাকে ভালোভাবে বিবেচনা করে দেখতে হবে। স্পষ্টভাবে ডিজাইন করা অন-অফ ভাইব্রেশনে ফিরে গেলে ভাল হতে পারে।
ভাইব্রেশন চালু ও বন্ধ করা
নতুন SDK লেভেলে, সমস্ত ভাইব্রেশন মোডকে একটি
এক্সপ্রেসিভ VibrationEffect ক্লাসে একত্রিত করা হয়েছে, যেখানে VibrationEffect.createOneShot বা VibrationEffect.createWaveform ব্যবহার করে এইসব সাধারণ ভাইব্রেশন তৈরি করা
হয়।
বিজ্ঞপ্তি API
আপনার অ্যাপ বিজ্ঞপ্তি কাস্টমাইজ করার সময়, প্রতিটি বিজ্ঞপ্তি চ্যানেলের সাথে প্যাটার্ন অ্যাসোসিয়েট করতে আপনি নিম্নলিখিত API-এর মধ্যে একটি ব্যবহার করতে পারবেন:
- AndroidX
- Android
এইসব ফর্মের সবকটিতেই একটি সাধারণ অন-অফ ওয়েভফর্ম প্যাটার্ন থাকে, যেমনটি আগে বর্ণনা করা হয়েছে, যেখানে প্রথম এন্ট্রি হল ভাইব্রেটর চালু করার আগে বিলম্ব।
সাধারণ ধারণা
উপরে উল্লেখ করা API সারফেস জুড়ে একাধিক ধারণা প্রযোজ্য।
ডিভাইসে কি ভাইব্রেটর আছে?
আপনি context.getSystemService(Vibrator.class) থেকে
নন-নাল Vibrator ক্লাস পেতে পারেন। ডিভাইসে
ভাইব্রেটর না থাকলে, ভাইব্রেশন API-তে কল করলে কোনও প্রভাব পড়ে না, তাই অ্যাপগুলিকে কোনও শর্তের উপর ভিত্তি করে তাদের সব হ্যাপটিক্সকে গেট করতে
হয় না। তবে, প্রয়োজন হলে, কোনও অ্যাপ্লিকেশন
hasVibrator() কল করে
এটি আসল ভাইব্রেটর (true) নাকি স্টাব (false) তা নির্ধারণ করতে পারে।
ব্যবহারকারী কি টাচ হ্যাপটিক বন্ধ করে দিয়েছেন?
কিছু কাস্টম প্রয়োগের ক্ষেত্রে ব্যবহারকারী Android-এর টাচ ফিডব্যাক
সেটিং সম্পূর্ণ বন্ধ করে দিয়েছেন কিনা তা ম্যানুয়ালি চেক করতে হতে পারে।
যদি বন্ধ করে দিয়ে থাকেন, তাহলে টাচ ফিডব্যাক এফেক্ট বন্ধ করে দিতে হবে। HAPTIC_FEEDBACK_ENABLED কী ব্যবহার করে এই সেটিং
কোয়েরি করা যেতে পারে, যেখানে শূন্য
মান মানে হল বন্ধ করা আছে।
ভাইব্রেশন অ্যাট্রিবিউট
ভাইব্রেশন অ্যাট্রিবিউট (বর্তমানে AudioAttributes হিসেবে আছে) ভাইব্রেশনের উদ্দেশ্য সম্পর্কে সিস্টেমকে জানাতে সাহায্য করার জন্য
প্রদান করা যেতে পারে। আপনার অ্যাপ ব্যাকগ্রাউন্ডে থাকাকালীন ভাইব্রেশন শুরু করার জন্য এটি
প্রয়োজনীয়,
কারণ ব্যাকগ্রাউন্ডে ব্যবহারের জন্য শুধুমাত্র অ্যাটেনশনাল হ্যাপটিক কাজ করে।
AudioAttributes তৈরি করার বিষয়টি এর ক্লাস ডকুমেন্টেশনে উল্লেখ করা আছে এবং
সেটিকে শব্দ হিসেবে না ভেবে কম্পন হিসেবে ভাবা উচিত।
নির্দেশিকা হিসেবে, বেশিরভাগ ক্ষেত্রে কন্টেন্টের ধরন হল CONTENT_TYPE_SONIFICATION,
এবং ব্যবহার হতে পারে USAGE_ASSISTANCE_SONIFICATION-এর মতো ভ্যালু যা
ফোরগ্রাউন্ডে টাচ ফিডব্যাকের জন্য অথবা USAGE_ALARM যা
ব্যাকগ্রাউন্ডে অ্যালার্মের জন্য। কম্পনের উপর অডিও ফ্ল্যাগের কোনও প্রভাব পড়ে না।
অ্যামপ্লিচিউড কন্ট্রোল
কোনও ভাইব্রেটরে অ্যামপ্লিটিউড কন্ট্রোল থাকলে, সেটি বিভিন্ন ইনটেনসিটি সহ ভাইব্রেশন প্লে করতে পারে। এটি উন্নত হ্যাপটিক তৈরি করার জন্য একটি গুরুত্বপূর্ণ ক্ষমতা, পাশাপাশি সম্ভাব্যভাবে ডিফল্ট হ্যাপটিক ইনটেনসিটি ব্যবহারকারীর কন্ট্রোলের অনুমতি দেয়।
অ্যামপ্লিটিউড কন্ট্রোল কাজ করে কিনা তা চেক করতে
Vibrator.hasAmplitudeControl নম্বরে কল করুন। কোনও ভাইব্রেটরে অ্যামপ্লিটিউড
সাপোর্ট না থাকলে, সব অ্যামপ্লিটিউড ভ্যালু অফ বা অন হিসেবে ম্যাপ করা হবে, এটি নির্ভর করে যে সেগুলি
শূন্য বা অশূন্য। ফলে, যেসব অ্যাপ্লিকেশন বিভিন্ন
অ্যামপ্লিটিউড সহ রিচ হ্যাপটিক ব্যবহার করে, ডিভাইসে অ্যামপ্লিটিউড কন্ট্রোল না থাকলে সেগুলি বন্ধ করে দেওয়ার কথা বিবেচনা করা উচিত।
এনভেলপ এফেক্ট সংক্রান্ত সহায়তা
এনভেলপ এফেক্ট কাজ করে এমন ভাইব্রেটর, আরও ডায়নামিক
ও সূক্ষ্ম ভাইব্রেশন তৈরি করতে সাহায্য করে। এর ফলে, আরও উন্নত হ্যাপ্টিক অভিজ্ঞতার জন্য ইনটেনসিটি ও
শার্পনেসের উপর আরও নিখুঁত কন্ট্রোল পাওয়া যায়। আপনার ডিভাইসে এই ফিচার কাজ করে কিনা তা
নির্ধারণ করতে
Vibration.areEnvelopeEffectsSupported ব্যবহার করুন। এটি না হলে, এনভেলপ ভিত্তিক ভাইব্রেশন উপেক্ষা করা হয়।