উত্তর:
চেষ্টা করুন:
import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
//deprecated in API 26
v.vibrate(500);
}
বিঃদ্রঃ:
AndroidManLive.xML ফাইলে অনুমতি অন্তর্ভুক্ত করতে ভুলবেন না:
<uses-permission android:name="android.permission.VIBRATE"/>
vibrate(VibrationEffect)
। পরিবর্তে ব্যবহার করুন।
আপনি কোনও কম্পন কোড প্রয়োগ করা শুরু করার আগে আপনাকে আপনার অ্যাপ্লিকেশনটিকে ভাইব্রের অনুমতি দিতে হবে:
<uses-permission android:name="android.permission.VIBRATE"/>
আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে এই লাইনটি অন্তর্ভুক্ত করার বিষয়টি নিশ্চিত করুন।
বেশিরভাগ আইডিই আপনার জন্য এটি করবে, তবে আপনার যদি তা না করে তবে আমদানি বিবৃতি এখানে দেওয়া আছে:
import android.os.Vibrator;
আপনি যে স্পন্দনটি ঘটতে চান সেখানে সেই কার্যকলাপে এটি নিশ্চিত করুন sure
বেশিরভাগ পরিস্থিতিতে, আপনি একটি স্বল্প, পূর্ব নির্ধারিত সময়ের জন্য ডিভাইসটি স্পন্দিত করতে চাইবেন। আপনি vibrate(long milliseconds)
পদ্ধতিটি ব্যবহার করে এটি অর্জন করতে পারেন । এখানে একটি দ্রুত উদাহরণ:
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 400 milliseconds
v.vibrate(400);
এটাই, সরল!
এটি এমন পরিস্থিতিতে হতে পারে যে আপনি ডিভাইসটি অনির্দিষ্টকালের জন্য কম্পন চালিয়ে যেতে চান। এর জন্য, আমরা vibrate(long[] pattern, int repeat)
পদ্ধতিটি ব্যবহার করি :
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Start without a delay
// Vibrate for 100 milliseconds
// Sleep for 1000 milliseconds
long[] pattern = {0, 100, 1000};
// The '0' here means to repeat indefinitely
// '0' is actually the index at which the pattern keeps repeating from (the start)
// To repeat the pattern from any other point, you could increase the index, e.g. '1'
v.vibrate(pattern, 0);
আপনি যখন কম্পন বন্ধ করতে প্রস্তুত হন, কেবল cancel()
পদ্ধতিটি কল করুন :
v.cancel();
আপনি যদি আরও বেশি স্পষ্টভাবে কম্পন চান তবে আপনি নিজের কম্পনের নিদর্শন তৈরি করতে চেষ্টা করতে পারেন:
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Start without a delay
// Each element then alternates between vibrate, sleep, vibrate, sleep...
long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100};
// The '-1' here means to vibrate once, as '-1' is out of bounds in the pattern array
v.vibrate(pattern, -1);
এমন একাধিক এসডিকে রয়েছে যা হ্যাপটিক প্রতিক্রিয়ার আরও বিস্তৃত পরিসীমা সরবরাহ করে। আমি বিশেষ প্রভাবগুলির জন্য যেটি ব্যবহার করি তা হ'ল অ্যান্ড্রয়েডের জন্য নিমজ্জনের হ্যাপটিক ডেভলপমেন্ট প্ল্যাটফর্ম ।
আপনার ডিভাইসটি কম্পন না করলে প্রথমে নিশ্চিত হয়ে নিন যে এটি স্পন্দিত হতে পারে:
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Output yes if can vibrate, no otherwise
if (v.hasVibrator()) {
Log.v("Can Vibrate", "YES");
} else {
Log.v("Can Vibrate", "NO");
}
দ্বিতীয়ত, দয়া করে নিশ্চিত করুন যে আপনি আপনার অ্যাপ্লিকেশনটিকে কম্পনের অনুমতি দিয়েছেন! প্রথম পয়েন্ট ফিরে দেখুন।
অ্যান্ড্রয়েড-ও (এপিআই 8.0) এর সাথে হালনাগাদ করুন 2017 ভাইব্রেট (অন্তর) পদ্ধতিটি হ্রাস করা হয়েছে
সমস্ত অ্যান্ড্রয়েড সংস্করণ সমর্থন করার জন্য এই পদ্ধতিটি ব্যবহার করুন।
// Vibrate for 150 milliseconds
private void shakeItBaby() {
if (Build.VERSION.SDK_INT >= 26) {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150);
}
}
Kotlin:
// Vibrate for 150 milliseconds
private fun shakeItBaby(context: Context) {
if (Build.VERSION.SDK_INT >= 26) {
(context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
(context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(150)
}
}
getSystemService
সঙ্গেthis.getContext().getSystemService
উপরের উত্তরগুলি নিখুঁত। তবে আমি বোতাম ক্লিকে আমার অ্যাপটি ঠিক দু'বার স্পন্দিত করতে চেয়েছিলাম এবং এই ছোট তথ্যটি এখানে অনুপস্থিত, তাই আমার মতো ভবিষ্যতের পাঠকদের জন্য পোস্ট করা। :)
উপরে বর্ণিত অনুসারে আমাদের অনুসরণ করতে হবে এবং একমাত্র পরিবর্তনটি নীচের মতো স্পন্দিত প্যাটার্নে হবে,
long[] pattern = {0, 100, 1000, 300};
v.vibrate(pattern, -1); //-1 is important
এটি হ'ল দু'বার কম্পন করবে । আমরা ইতিমধ্যে জানি
কেউ বিকল্প হিসাবে বিলম্ব এবং কম্পন উল্লেখ করে যেতে পারে (উদাহরণস্বরূপ 0, 100, 1000, 300, 1000, 300 এবং 3 টি কম্পনের জন্য 300 এবং তাই ..) তবে মনে রাখবেন @ ডেভের শব্দটি এটি দায়বদ্ধতার সাথে ব্যবহার করেছে। :)
এছাড়াও এখানে নোট করুন যে পুনরাবৃত্তি প্যারামিটারটি -1 এ সেট করা হয়েছে যার অর্থ হ'ল কম্পনটি ঠিক প্যাটার্নে উল্লিখিত হিসাবে ঘটবে । :)
আমার প্রথম প্রয়োগে এটি কীভাবে করা যায় তা বোঝার জন্য আমি লড়াই করেছিলাম - আপনার নিম্নলিখিতগুলি রয়েছে তা নিশ্চিত করুন:
1) আপনার ডিভাইসটি কম্পনকে সমর্থন করে (আমার স্যামসাং ট্যাবলেটটি কাজ করে না তাই আমি কোডটি পুনরায় পরীক্ষা করে দেখি - মূল কোডটি আমার সিএম টাচপ্যাডে পুরোপুরি কাজ করে
2) আপনি কোডটি চালানোর অনুমতি দেওয়ার জন্য আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে অ্যাপ্লিকেশন স্তরের উপরে ঘোষণা করেছেন।
3) অন্যান্য আমদানির সাথে আপনার মেইনএকটিভিটি.জভাতে নিম্নলিখিত দুটিই আমদানি করেছেন: আমদানি android.content.Context; আমদানি android.os.Vibrator;
৪) আপনার কম্পনকে কল করুন (ইতিমধ্যে এই থ্রেডটিতে বিস্তৃতভাবে আলোচনা করা হয়েছে) - আমি এটি আলাদা ফাংশনে করেছি এবং কোডটিতে অন্য পয়েন্টগুলিতে এটি কল করেছি - আপনি যে চিত্রটির প্রয়োজন হতে পারে সেই কম্পনটি কল করতে আপনি কী ব্যবহার করতে চান তার উপর নির্ভর করে ( অ্যান্ড্রয়েড: একটি বোতামে দীর্ঘ ক্লিক করুন -> ক্রিয়া সম্পাদন করুন ) বা বোতাম শ্রোতা, বা এক্সএমএল ( ক্লিকযোগ্য চিত্র - অ্যান্ড্রয়েড ) এ সংজ্ঞায়িত হিসাবে ক্লিকযোগ্য বস্তু :
public void vibrate(int duration)
{
Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibs.vibrate(duration);
}
আপনি যদি কোনও ব্যবহারকারী ক্রিয়ায় প্রতিক্রিয়া জানানোর জন্য কেবল একবার ডিভাইসটি কম্পন করতে চান। আপনি performHapticFeedback()
একটি এর ফাংশন ব্যবহার করতে পারেন View
। VIBRATE
ম্যানিফেস্টে ঘোষণা করার জন্য এটির অনুমতি প্রয়োজন নেই doesn't
আপনার প্রকল্পের Utils.kt এর মতো কিছু সাধারণ শ্রেণিতে শীর্ষ স্তরের ফাংশন হিসাবে নিম্নলিখিত ফাংশনটি ব্যবহার করুন:
/**
* Vibrates the device. Used for providing feedback when the user performs an action.
*/
fun vibrate(view: View) {
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
}
এবং তারপরে এটি আপনার Fragment
বা অন্য যে কোনও জায়গায় ব্যবহার করুন Activity
:
vibrate(requireView())
সরল!
<uses-permission android:name="android.permission.VIBRATE"/>
<manifest>
ট্যাগ এবং বাইরের <application>
ট্যাগের ভিতরে যুক্ত করা উচিত ।
আমি নিম্নলিখিত ব্যবহার পদ্ধতি ব্যবহার করি:
public static final void vibratePhone(Context context, short vibrateMilliSeconds) {
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(vibrateMilliSeconds);
}
অ্যান্ড্রয়েডমেনিস্ট ফাইলটিতে নিম্নলিখিত অনুমতিটি যুক্ত করুন
<uses-permission android:name="android.permission.VIBRATE"/>
আপনি যদি উপরে বর্ণিত বিভিন্ন ধরণের কম্পন (নিদর্শন / অনির্দিষ্ট) ব্যবহার করতে চান তবে আপনি ওভারলোডেড পদ্ধতিগুলি ব্যবহার করতে পারেন।
উপরের উত্তরটি খুব সঠিক তবে আমি এটি করার জন্য একটি সহজ পদক্ষেপ দিচ্ছি:
private static final long[] THREE_CYCLES = new long[] { 100, 1000, 1000, 1000, 1000, 1000 };
public void longVibrate(View v)
{
vibrateMulti(THREE_CYCLES);
}
private void vibrateMulti(long[] cycles) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification();
notification.vibrate = cycles;
notificationManager.notify(0, notification);
}
এবং তারপরে আপনার এক্সএমএল ফাইলটিতে:
<button android:layout_height="wrap_content"
android:layout_width ="wrap_content"
android:onclick ="longVibrate"
android:text ="VibrateThrice">
</button>
এটি সবচেয়ে সহজ উপায়।
প্যাটার্নস / ওয়েভগুলিতে কম্পন :
import android.os.Vibrator;
...
// Vibrate for 500ms, pause for 500ms, then start again
private static final long[] VIBRATE_PATTERN = { 500, 500 };
mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// API 26 and above
mVibrator.vibrate(VibrationEffect.createWaveform(VIBRATE_PATTERN, 0));
} else {
// Below API 26
mVibrator.vibrate(VIBRATE_PATTERN, 0);
}
যোগ
প্রয়োজনীয় অনুমতি এতে AndroidManifest.xml
:
<uses-permission android:name="android.permission.VIBRATE"/>
আপনার প্রকল্পের কিছু সাধারণ শ্রেণিতে যেমন Utils.kt এ এটি শীর্ষ স্তরের ফাংশন হিসাবে ব্যবহার করুন
// Vibrates the device for 100 milliseconds.
fun vibrateDevice(context: Context) {
val vibrator = getSystemService(context, Vibrator::class.java)
vibrator?.let {
if (Build.VERSION.SDK_INT >= 26) {
it.vibrate(VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
@Suppress("DEPRECATION")
it.vibrate(100)
}
}
}
এবং তারপরে এটিকে আপনার কোডের যে কোনও জায়গায় কল করুন:
vibrateDevice(requireContext())
ব্যবহার Vibrator::class.java
করা ব্যবহারের চেয়ে বেশি ধরণের নিরাপদString
ধ্রুবক।
আমরা vibrator
ব্যবহার করে ন্যূনযোগ্যতার জন্য পরীক্ষা করে দেখি let { }
, কারণ যদি ডিভাইসের জন্য কম্পন উপলব্ধ না হয় তবে vibrator
তা হবেnull
।
এতে অবচয়কে দমন করা ঠিক আছে else
, কারণ সতর্কতাটি নতুন এসডিকে থেকে।
আমাদের কম্পন ব্যবহার করার জন্য রানটাইমের সময় অনুমতি চাইতে হবে না। তবে আমাদের এটিকে AndroidManifest.xml
নিম্নলিখিত হিসাবে ঘোষণা করতে হবে :
<uses-permission android:name="android.permission.VIBRATE"/>
এটা ব্যবহার কর:
import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 1000 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneShot(1000,VibrationEffect.DEFAULT_AMPLITUDE));
}else{
//deprecated in API 26
v.vibrate(1000);
}
বিঃদ্রঃ:
AndroidManLive.xML ফাইলে অনুমতি অন্তর্ভুক্ত করতে ভুলবেন না:
<uses-permission android:name="android.permission.VIBRATE"/>