অ্যান্ড্রয়েড 16 রেঞ্জিং মডিউল প্রবর্তন করে, যা ডিভাইসগুলির মধ্যে সুনির্দিষ্ট পরিসরের জন্য একটি একীভূত এবং মানসম্মত ইন্টারফেস প্রদান করে। আপনি প্রতিটি রেঞ্জিং প্রযুক্তিকে পৃথকভাবে পরিচালনা করার প্রয়োজন ছাড়াই পিয়ার ডিভাইসগুলির দূরত্ব এবং অবস্থান পরিমাপ করতে এই API পৃষ্ঠটি ব্যবহার করতে পারেন।
রেঞ্জিং মডিউল নিম্নলিখিত প্রযুক্তিগুলিকে সমর্থন করে:
- আল্ট্রা-ওয়াইডব্যান্ড
- ব্লুটুথ চ্যানেল সাউন্ডিং
- Wi-Fi NAN RTT
- ব্লুটুথ RSSI রেঞ্জিং
রেঞ্জিং ক্ষমতা এবং প্রাপ্যতা
RangingManager
ক্লাস স্থানীয় ডিভাইস দ্বারা সমর্থিত রেঞ্জিং প্রযুক্তির পাশাপাশি প্রতিটি প্রযুক্তির প্রাপ্যতা এবং ক্ষমতা সম্পর্কে তথ্য প্রদান করে। যেকোন সমর্থিত প্রযুক্তির উপলব্ধতা বা ক্ষমতার পরিবর্তনের আপডেট পেতে অ্যাপগুলি Callback
জন্য নিবন্ধন করতে পারে।
ডিভাইসের ভূমিকা
একটি বিস্তৃত অধিবেশনে অংশগ্রহণকারী একটি ডিভাইস অবশ্যই একটি সূচনাকারী বা একটি প্রতিক্রিয়াকারী হতে হবে৷ ইনিশিয়েটর ডিভাইস এক বা একাধিক রেসপন্ডার ডিভাইসের সাথে রেঞ্জিং সেশন শুরু করে। একটি প্রতিক্রিয়াকারী ডিভাইস একবারে শুধুমাত্র একজন সূচনাকারীর কাছ থেকে বিস্তৃত অনুরোধে সাড়া দেয়। আপনি RangingPreference
ক্লাসের সাথে একটি রেঞ্জিং সেশনে একটি প্রদত্ত ডিভাইসের ভূমিকা নির্দিষ্ট করতে পারেন।
রেঞ্জিং সেশনের ধরন
ডিভাইসগুলির মধ্যে একটি রেঞ্জিং সেশন শুরু করার সময়, প্রায়শই সেশনের প্যারামিটারগুলি বিনিময় করতে একটি আউট-অফ-ব্যান্ড (OOB) ডেটা ট্রান্সপোর্ট স্থাপন করা প্রয়োজন৷
রেঞ্জিং মডিউল আপনার জন্য OOB আলোচনা পরিচালনা করতে পারে, তবে এটি কাস্টম OOB বাস্তবায়নকেও সমর্থন করে।

ডিফল্ট OOB বাস্তবায়ন
এই সেশনের প্রকারে ( RANGING_SESSION_OOB
), রেঞ্জিং মডিউল একটি রেঞ্জিং সেশন শুরু করতে OOB আলোচনা পরিচালনা করে। এটি অ্যাপ দ্বারা প্রদত্ত রেঞ্জিং পছন্দগুলির উপর ভিত্তি করে উপযুক্ত প্যারামিটার নির্বাচন করে এবং উভয় ডিভাইস যা সমর্থন করে তার উপর ভিত্তি করে এটি উপযুক্ত প্রযুক্তি ব্যবহার করে। এই সেশন টাইপ একটি প্রমিত OOB specification
ব্যবহার করে।
রেঞ্জিং মডিউল শুধুমাত্র OOB ডেটা বিন্যাস এবং একটি পিয়ার ডিভাইসের সাথে ইন্টারঅ্যাক্ট করতে ব্যবহৃত ক্রম সংজ্ঞায়িত করে। এটি পিয়ার ডিভাইস আবিষ্কার বা সংযোগ স্থাপন পরিচালনা করে না।
কাস্টম OOB বাস্তবায়ন
এই সেশনের প্রকারে ( RANGING_SESSION_RAW
), অ্যাপটি রেঞ্জিং মডিউলের OOB ফ্লোকে বাইপাস করে এবং তার নিজস্ব OOB আলোচনা এবং পরামিতিগুলি পরিচালনা করে৷ এর মানে অ্যাপটি পিয়ার ডিভাইস কোন প্রযুক্তি সমর্থন করে তা নির্ধারণ করে, রেঞ্জিং প্যারামিটার নিয়ে আলোচনা করে এবং রেঞ্জিং সেশন শুরু করে।
রেঞ্জিং পছন্দ
একটি রেঞ্জিং সেশনের জন্য পছন্দসই প্যারামিটার নির্দিষ্ট করতে একটি RangingPreference
অবজেক্ট ব্যবহার করুন। এর মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
- ডিভাইসের ভূমিকা। এটি নির্দেশ করে যে ডিভাইসটি সূচনাকারী বা প্রতিক্রিয়াকারী হবে।
- রেঞ্জিং কনফিগারেশন। একটি
RangingConfig
অবজেক্ট রেঞ্জিং সেশনের ধরন এবং একটি রেঞ্জিং সেশন শুরু করার জন্য প্রয়োজনীয় অন্যান্য প্যারামিটার নির্দিষ্ট করে। - সেশন কনফিগারেশন। একটি
SessionConfig
অবজেক্ট পরিমাপ সীমা, সেন্সর ফিউশন, জিওফেন্স কনফিগারেশন এবং আরও অনেক কিছুর মতো রেঞ্জিং সেশনে প্রয়োগ করার পরামিতিগুলি নির্দিষ্ট করে৷
রেঞ্জিং অনুমতি
রেঞ্জিং মডিউলটির একটি নতুন ইউনিফাইড অনুমতি প্রয়োজন ( android.permission.RANGING
) সমস্ত বর্তমান এবং ভবিষ্যতের রেঞ্জিং প্রযুক্তি অ্যাক্সেস করার জন্য৷ এই অনুমতিটি NEARBY_DEVICES_PERMISSIONS
তালিকায় রয়েছে৷
<uses-permission android:name="android.permission.RANGING" />
সীমাবদ্ধতা এবং সীমাবদ্ধতা
রেঞ্জিং মডিউল নিম্নোক্ত সহ বিভিন্ন কারণে রেঞ্জিং সীমাবদ্ধ করতে পারে:
- থার্ড-পার্টি অ্যাপ্লিকেশানগুলিকে শুধুমাত্র আল্ট্রা-ওয়াইডব্যান্ডের সাথে ব্যাকগ্রাউন্ড করার অনুমতি দেওয়া হয় এবং শুধুমাত্র সমর্থিত ডিভাইসগুলিতে । অন্যান্য প্রযুক্তির সাথে ব্যাকগ্রাউন্ডে রেঞ্জিং অনুমোদিত নয়।
- ডিভাইসের মাধ্যমে সর্বাধিক সংখ্যক সমসাময়িক রেঞ্জিং সেশনে পৌঁছে গেলে রেঞ্জিং অনুমোদিত নয়।
- ব্যাটারি, কর্মক্ষমতা বা মেমরির মতো সিস্টেমের স্বাস্থ্য সংক্রান্ত উদ্বেগের কারণে রেঞ্জিং সীমাবদ্ধ হতে পারে।
রেঞ্জিং মডিউলেরও নিম্নলিখিত পরিচিত সীমাবদ্ধতা রয়েছে:
- রেঞ্জিং মডিউল শুধুমাত্র আল্ট্রা-ওয়াইডব্যান্ডের জন্য পিয়ার ডিভাইসগুলিতে রেঞ্জিং ডেটা সরবরাহ করতে সহায়তা করে। অন্যান্য প্রযুক্তির জন্য, রেঞ্জিং মডিউল শুধুমাত্র ইনিশিয়েটর ডিভাইসে রেঞ্জিং ডেটা সরবরাহ করে।
- রেঞ্জিং মডিউল শুধুমাত্র কাঁচা রেঞ্জিং মোডে ডিভাইসগুলির গতিশীল সংযোজন সমর্থন করে এবং শুধুমাত্র আল্ট্রা-ওয়াইডব্যান্ডের জন্য।
- রেঞ্জিং মডিউল ডিফল্ট OOB বাস্তবায়নের জন্য এক থেকে একাধিক আল্ট্রা-ওয়াইডব্যান্ড সেশন সমর্থন করে না। আপনি যদি একাধিক ডিভাইস হ্যান্ডেলগুলিতে পাস করেন, মডিউলটি প্রতিটি পিয়ার ডিভাইসের জন্য এক-টু-ওয়ান সেশন তৈরি করে যা আল্ট্রা-ওয়াইডব্যান্ড সমর্থন করে।
একটি পরিসরের অধিবেশন পরিচালনা করুন
রেঞ্জিং মডিউল ব্যবহার করে একটি রেঞ্জিং সেশন পরিচালনা করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- সমস্ত ডিভাইস Android 16 বা উচ্চতর সংস্করণে কাজ করছে কিনা তা যাচাই করুন।
- অ্যাপ ম্যানিফেস্টে
android.permission.RANGING
অনুমতির জন্য অনুরোধ করুন। - বিস্তৃত প্রযুক্তির ক্ষমতা এবং প্রাপ্যতা মূল্যায়ন করুন।
- রেঞ্জিং অপারেশনের জন্য একটি পিয়ার ডিভাইস আবিষ্কার করুন।
- রেঞ্জিং সেশনের ধরনগুলিতে বর্ণিত সেশনের ধরনগুলির যে কোনও একটি ব্যবহার করে ব্যান্ডের বাইরের বিনিময়ের জন্য একটি সংযোগ স্থাপন করুন৷
- রেঞ্জিং শুরু করুন এবং ক্রমাগত রেঞ্জিং ডেটা অর্জন করুন।
- রেঞ্জিং সেশনটি বন্ধ করুন।
নিম্নলিখিত কোড নমুনা সূচনাকারী ভূমিকা এবং প্রতিক্রিয়াকারী ভূমিকা উভয়ের জন্য এই পদক্ষেপগুলি প্রদর্শন করে।
কোটলিন
class RangingApp {
// Starts a ranging session on the initiator side.
fun startRangingInitiator(
context: Context,
deviceHandle: DeviceHandle,
executor: Executor,
callback: RangingSessionCallback
) {
// Get the RangingManager which is the entry point for ranging module.
val manager = context.getSystemService(RangingManager::class.java)
// Create a new RangingSession using the provided executor and callback.
val session = manager.createRangingSession(executor, callback)
// Create an OobInitiatorRangingConfig, which specifies the ranging parameters for
// the initiator role.
val config = OobInitiatorRangingConfig.Builder()
.setFastestRangingInterval(Duration.ofMillis(100))
.setSlowestRangingInterval(Duration.ofMillis(5000))
.setRangingMode(RANGING_MODE_AUTO)
.setSecurityLevel(SECURITY_LEVEL_BASIC)
.addDeviceHandle(deviceHandle)
.build()
// Create a RangingPreference, which specifies the role (initiator) and
// configuration for the ranging session.
val preference =
RangingPreference.Builder(DEVICE_ROLE_INITIATOR, config).build()
// Start ranging session.
session.start(preference)
// If successful, the ranging data will be sent through callback#onResults
// Stop ranging session
session.stop()
}
// Starts a ranging session on the responder side.
fun startRangingResponder(
context: Context,
deviceHandle: DeviceHandle,
executor: Executor,
callback: RangingSessionCallback
) {
// Get the RangingManager which is the entry point for ranging module.
val manager = context.getSystemService(RangingManager::class.java)
// Create a new RangingSession using the provided executor and callback.
val session = manager.createRangingSession(executor, callback)
// Create an OobResponderRangingConfig, which specifies the ranging parameters for
// the responder role.
val config = OobResponderRangingConfig.Builder(deviceHandle).build()
// Create a RangingPreference, which specifies the role (responder) and
// configuration for the ranging session.
val preference =
RangingPreference.Builder(DEVICE_ROLE_RESPONDER, config).build()
// Start the ranging session.
session.start(preference)
// Stop the ranging session
session.stop()
}
}
জাভা
public class RangingApp {
// Starts a ranging session on the initiator side.
void startRangingInitiator(Context context, DeviceHandle deviceHandle, Executor executor, RangingSessionCallback callback) {
// Get the RangingManager which is the entry point for ranging module.
RangingManager manager = context.getSystemService(RangingManager.class);
// Create a new RangingSession using the provided executor and callback.
RangingSession session = manager.createRangingSession(executor, callback);
// Create an OobInitiatorRangingConfig, which specifies the ranging parameters for
// the initiator role.
OobInitiatorRangingConfig config = new OobInitiatorRangingConfig.Builder()
.setFastestRangingInterval(Duration.ofMillis(100))
.setSlowestRangingInterval(Duration.ofMillis(5000))
.setRangingMode(RANGING_MODE_AUTO)
.setSecurityLevel(SECURITY_LEVEL_BASIC)
.addDeviceHandle(deviceHandle)
.build();
// Create a RangingPreference, which specifies the role (initiator) and
// configuration for the ranging session.
RangingPreference preference =
new RangingPreference.Builder(DEVICE_ROLE_INITIATOR, config).build();
// Start ranging session.
session.start(preference);
// If successful, the ranging data will be sent through callback#onResults
// Stop ranging session
session.stop();
}
// Starts a ranging session on the responder side.
void startRangingResponder(Context context, DeviceHandle deviceHandle, Executor executor, RangingSessionCallback callback) {
// Get the RangingManager which is the entry point for ranging module.
RangingManager manager = context.getSystemService(RangingManager.class);
// Create a new RangingSession using the provided executor and callback.
RangingSession session = manager.createRangingSession(executor, callback);
// Create an OobResponderRangingConfig, which specifies the ranging parameters for
// the responder role.
OobResponderRangingConfig config = new OobResponderRangingConfig.Builder( deviceHandle).build();
// Create a RangingPreference, which specifies the role (responder) and
// configuration for the ranging session.
RangingPreference preference =
new RangingPreference.Builder(DEVICE_ROLE_RESPONDER, config).build();
// Start the ranging session.
session.start(preference);
// Stop the ranging session
session.stop();
}
}
নমুনা অ্যাপ্লিকেশন
রেঞ্জিং মডিউল কীভাবে ব্যবহার করবেন তার এন্ড-টু-এন্ড উদাহরণের জন্য, AOSP-তে নমুনা অ্যাপটি দেখুন। এই নমুনা অ্যাপটি রেঞ্জিং মডিউল দ্বারা সমর্থিত সমস্ত রেঞ্জিং প্রযুক্তিকে কভার করে এবং সমর্থিত উভয় ধরনের সেশনের জন্য প্রবাহ অন্তর্ভুক্ত করে।