একটি টার্ন-বাই-টার্ন ডেটা ফিড ম্যাপ-ভিত্তিক নেভিগেশন নির্দেশিকা জন্য ডিজাইন করা হয়নি এমন ডিভাইসগুলিতে শুধুমাত্র নেভিগেশন তথ্য প্রদান করে। এটি আপনার সরবরাহকারী উপাদানগুলির সাথে আসন্ন কৌশলগুলি সরবরাহ করে:
- আইকন (বাম, ডান, ইউ-টার্ন)
- বৃত্তাকার মধ্যে সংখ্যা চালু
- রাস্তার নাম
- পরবর্তী নেভিগেশন ধাপ বা চূড়ান্ত গন্তব্যে আনুমানিক দূরত্ব এবং সময়
যেখানে সম্পূর্ণ ন্যাভিগেশন SDK UI উপযুক্ত নয়, যেমন Android Auto বা ছোট স্ক্রীনের ডিসপ্লেগুলির জন্য যেখানে একটি সম্পূর্ণ অ্যান্ড্রয়েড স্ট্যাক উপলব্ধ নেই সেখানে অভিজ্ঞতা তৈরি করতে আপনি পালাক্রমে ফিড ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি এটি দ্বি-চাকার যানবাহন চালকদের জন্য ব্যবহার করতে পারেন, যেখানে আপনি ন্যূনতম বিভ্রান্তির সাথে দ্রুত এবং আরও আত্মবিশ্বাসের সাথে তাদের গন্তব্যে পৌঁছাতে সহায়তা করার জন্য শুধুমাত্র নেভিগেশন নির্দেশিকা প্রজেক্ট করতে পারেন।
SDK ব্যবহার করার জন্য, আপনি একটি পরিষেবা তৈরি করবেন এবং এটিকে Android এর জন্য নেভিগেশন SDK-এর সাথে নিবন্ধন করবেন যাতে এটি রিয়েল টাইমে নতুন নেভিগেশন তথ্য পেতে পারে (নেভিগেশনের সময় প্রায় একবার)।
এই নথিটি আপনাকে দেখায় কিভাবে একটি নেভিগেশন পরিষেবা তৈরি এবং নিবন্ধন করতে হয় যা SDK থেকে নেভিগেশন তথ্য গ্রহণ করে এবং গ্রহীতা ডিভাইসে নেভিগেশন অবস্থা প্রদান করে।
ওভারভিউ
এই বিভাগটি বর্ণনা করে যে কীভাবে আপনার প্রকল্পে TurnByTurn লাইব্রেরি যোগ করতে হয় এবং টার্ন-বাই-টার্ন কার্যকারিতা তৈরির জন্য উচ্চ-স্তরের প্রবাহের সংক্ষিপ্ত বিবরণ দেয়।
Maven ব্যবহার করে আপনার প্রকল্পে TurnByTurn লাইব্রেরি যোগ করুন (প্রস্তাবিত)
TurnByTurn লাইব্রেরির একটি স্বতন্ত্র সংস্করণ ব্যবহার করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- হোস্ট Maven সংগ্রহস্থল অ্যাক্সেস করতে আপনার পরিবেশ সেট আপ করুন:
মাভেন
আপনার
pom.xml
ফাইলে নিম্নলিখিত যোগ করুন:<project> ... <repositories> <repository> <id>google-maven-repository</id> <url>https://maven.google.com</url> </repository> </repositories> ... </project>
গ্রেডল
আপনার
build.gradle
ফাইলে নিম্নলিখিত যোগ করুন:repositories { ... google() }
- আপনার Maven বা Gradle কনফিগারেশনে নিম্নলিখিত নির্ভরতা যোগ করুন:
মাভেন
<dependencies> ... <dependency> <groupId>com.google.android.maps</groupId> <artifactId>google_turnbyturn</artifactId> <version>1.0.0</version> </dependency> </dependencies>
গ্রেডল
dependencies { ... implementation 'com.google.android.maps:google_turnbyturn:1.0.0' }
ডাউনলোড করা JAR ফাইল (বিকল্প) ব্যবহার করে আপনার প্রকল্পে TurnByTurn লাইব্রেরি যোগ করুন
TurnByTurn লাইব্রেরি এই SDK ফোল্ডারে একটি JAR ফাইল হিসাবে উপলব্ধ। আপনার অ্যাক্সেস না থাকলে, আপনার প্রতিনিধির সাথে যোগাযোগ করুন।
-
google_turnbyturn_*.jar
ডাউনলোড এবং আনজিপ করুন। - ডাউনলোড করা JAR ফাইলটি আপনার প্রজেক্টের
app/libs
ডিরেক্টরিতে কপি করুন। আপনার বিল্ডে JAR অন্তর্ভুক্ত করতে আপনার
build.gradle
এ নিম্নলিখিত যোগ করুন।dependencies { ... api fileTree(include: ['*.jar'], dir: 'libs') }
TurnByTurn লাইব্রেরি ব্যবহার করে
টার্ন-বাই-টার্ন কার্যকারিতা সক্ষম করার জন্য এখানে উচ্চ-স্তরের পদক্ষেপ রয়েছে। যে বিভাগগুলি অনুসরণ করে সেগুলি প্রতিটি পদক্ষেপের বিশদ বিবরণ দেয়৷
নেভিগেশন আপডেট পেতে একটি পরিষেবা তৈরি করুন
নেভিগেশন SDK আপনার TurnByTurn পরিষেবার সাথে আবদ্ধ হয় এবং এটিকে Android মেসেঞ্জারের মাধ্যমে নেভিগেশন আপডেট পাঠায়। আপনি এই আপডেটগুলির জন্য একটি নতুন নেভিগেশন পরিষেবা তৈরি করতে পারেন, বা একটি বিদ্যমান পরিষেবা ব্যবহার করতে পারেন৷
নেভিগেশন আপডেট পাওয়ার জন্য একটি পরিষেবা ব্যবহার করার সুবিধা হল পরিষেবাটি একটি পৃথক পটভূমি প্রক্রিয়ায় থাকতে পারে।
নিম্নলিখিত উদাহরণে পরিষেবাটি নেভিগেশন তথ্য গ্রহণ করে এবং TurnByTurnManager
ব্যবহার করে ডেটাকে একটি NavInfo
অবজেক্টে রূপান্তর করে যাতে নেভিগেশন বিবরণ রয়েছে।
/** * Receives turn-by-turn navigation information forwarded from NavSDK. */ public class NavInfoReceivingService extends Service { /** The messenger used by the service to receive nav step updates. */ private Messenger incomingMessenger; private TurnByTurnManager turnByTurnManager; private final class IncomingNavStepHandler extends Handler { public IncomingNavStepHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { // Identify the message through the msg.what field. if (TurnByTurnManager.MSG_NAV_INFO == msg.what) { // Extract the NavInfo object using the TurnByTurnManager. NavInfo navInfo = turnByTurnManager .readNavInfoFromBundle(msg.getData())); // Do something with the NavInfo } } } @Nullable @Override public IBinder onBind(Intent intent) { return incomingMessenger.getBinder(); } @Override public void onCreate() { turnByTurnManager = TurnByTurnManager.createInstance(); HandlerThread thread = new HandlerThread("NavInfoReceivingService", Process.THREAD_PRIORITY_DEFAULT); thread.start(); incomingMessenger = new Messenger( new IncomingNavStepHandler(thread.getLooper())); }
বার্তা কোড
NavInfo
বার্তাগুলি Message
ক্লাসের Message.what ফিল্ডের মাধ্যমে সনাক্ত করা যেতে পারে, যা TurnByTurnManager.MSG_NAV_INFO
এর মান সেট করা হয়।
নেভিগেশন আপডেটের জন্য পরিষেবাটি নিবন্ধন করা হচ্ছে
নিম্নলিখিত কোড স্নিপেটগুলি নেভিগেশন পরিষেবা নিবন্ধন করে।
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
পরিষেবা শুরু করা এবং বন্ধ করা
নেভিগেশন পরিষেবা সক্রিয় থাকে যতক্ষণ না নেভিগেশন SDK এর সাথে আবদ্ধ থাকে। ন্যাভিগেশন পরিষেবার জীবনচক্র নিয়ন্ত্রণ করতে আপনি ম্যানুয়ালি startService()
এবং stopService()
কল করতে পারেন, কিন্তু যখন আপনি ন্যাভিগেশন SDK-এর সাথে আপনার পরিষেবা নিবন্ধন করেন, তখন আপনার পরিষেবা স্বয়ংক্রিয়ভাবে শুরু হয় এবং আপনি যখন এটি নিবন্ধনমুক্ত করেন তখনই বন্ধ হয়ে যায়৷ আপনি কীভাবে আপনার অ্যাপ সেট আপ করেন তার উপর নির্ভর করে, আপনি একটি ফোরগ্রাউন্ড পরিষেবা শুরু করার কথা বিবেচনা করতে চাইতে পারেন, যা Android ডকুমেন্টেশন পরিষেবার ওভারভিউতে বর্ণিত হয়েছে।
পরিষেবাটি নিবন্ধনমুক্ত করা হচ্ছে
নেভিগেশন আপডেট প্রাপ্তি বন্ধ করতে, ন্যাভিগেশন SDK থেকে পরিষেবাটি নিবন্ধনমুক্ত করুন৷
navigator.unregisterServiceForNavUpdates();
নেভিগেশন অবস্থা বুঝতে
নেভিগেশনের বর্তমান অবস্থা পেতে NavInfo.getNavState()
ব্যবহার করুন, যা নিম্নলিখিতগুলির মধ্যে একটি:
পথে -
ENROUTE
অবস্থার অর্থ হল নির্দেশিত নেভিগেশন বর্তমানে সক্রিয় এবং ব্যবহারকারী প্রদত্ত রুটে রয়েছে৷ বর্তমান আসন্ন কৌশল পদক্ষেপ সম্পর্কে তথ্য উপলব্ধ.রিরাউটিং -
REROUTING
অর্থ হল নেভিগেশন চলছে, কিন্তু নেভিগেটর একটি নতুন রুট খুঁজছে। আসন্ন কৌশল পদক্ষেপ উপলব্ধ নয়, কারণ এখনও কোনো নতুন রুট নেই। নমুনা অ্যাপে , নেভিগেশন তথ্য প্রদর্শনে একটি "রিরাউটিং..." বার্তা প্রদর্শিত হবে। একবার একটি রুট পাওয়া গেলে, একটিNavInfo
বার্তা পাঠানো হয় রাজ্যENROUTE
এর সাথে।স্টপড -
STOPPED
মানে নেভিগেশন শেষ হয়েছে৷ উদাহরণস্বরূপ, ব্যবহারকারী যখন অ্যাপে নেভিগেশন থেকে বেরিয়ে যান তখন নেভিগেশন বন্ধ হয়ে যায়। নমুনা অ্যাপে, একটিSTOPPED
স্টেট নেভিগেশন ইনফো ডিসপ্লে সাফ করে যাতে দীর্ঘস্থায়ী পদক্ষেপ নির্দেশনাগুলি প্রদর্শিত হওয়া থেকে বিরত থাকে।
ফিড প্রদর্শন পপুলেট
এখন যেহেতু আপনি আপনার টার্ন-বাই-টার্ন সার্ভিস সেট আপ করেছেন, এই বিভাগে ভিজ্যুয়াল এবং টেক্সট উপাদানগুলিকে কভার করে যা আপনি পালাক্রমে ফিডের জন্য নির্দেশিকা কার্ডগুলি তৈরি করতে ব্যবহার করতে পারেন।
নেভিগেশন কার্ড তথ্য ক্ষেত্র
ব্যবহারকারী যখন নির্দেশিত নেভিগেশনে প্রবেশ করেন, তখন শীর্ষে একটি নেভিগেশন কার্ড প্রদর্শিত হয়, যেখানে নেভিগেশন SDK থেকে তৈরি নেভিগেশন ডেটা থাকে। সম্পর্কিত চিত্রটি এই প্রয়োজনীয় নেভিগেশন উপাদানগুলির একটি উদাহরণ দেখায়।
এই টেবিলটি নেভিগেশন তথ্যের জন্য ক্ষেত্রগুলি দেখায় এবং আপনি সেগুলি কোথায় পান৷
প্রতিটি নেভিগেশন ধাপের জন্য ক্ষেত্র | সামগ্রিক ভ্রমণের জন্য ক্ষেত্র |
---|---|
StepInfo পাওয়া গেছে | NavInfo এ পাওয়া গেছে |
পুরো রাস্তার নাম | বাকি সময় |
ম্যানুভার আইকন | গন্তব্যের দূরত্ব |
পরবর্তী ধাপে দূরত্ব | |
লেন নির্দেশিকা ক্ষেত্র |
লেন নির্দেশিকা
নেভিগেশন SDK নেভিগেশন টার্ন কার্ডে লেনগুলিকে লেন এবং লেনডিরেকশন ডেটা অবজেক্ট হিসাবে উপস্থাপন করে। একটি Lane
অবজেক্ট নেভিগেশনের সময় একটি নির্দিষ্ট লেনকে উপস্থাপন করে এবং একটি LaneDirection
অবজেক্টের একটি তালিকা রয়েছে যা এই লেন থেকে তৈরি করা যেতে পারে এমন সমস্ত বাঁক বর্ণনা করে।
একজন ব্যবহারকারীকে একটি লেনে যে দিকনির্দেশনা দেওয়া উচিত তা isRecommended ফিল্ড দ্বারা চিহ্নিত করা হয়েছে৷
লেন নির্দেশিকা উদাহরণ
নীচের স্নিপেটটি উপরে প্রদর্শিত লেনগুলির ডেটা উপস্থাপনাকে চিত্রিত করে৷
// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
{/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]
// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]
কৌশলের জন্য আইকন তৈরি করুন
Maneuver
enum প্রতিটি সম্ভাব্য কৌশল নির্ধারণ করে যা নেভিগেট করার সময় ঘটতে পারে এবং আপনি StepInfo.getManeuver()
পদ্ধতি থেকে একটি প্রদত্ত পদক্ষেপের জন্য ম্যানুভার পেতে পারেন।
আপনাকে অবশ্যই ম্যানুভার আইকন তৈরি করতে হবে এবং তাদের সংশ্লিষ্ট কৌশলগুলির সাথে যুক্ত করতে হবে। কিছু কৌশলের জন্য, আপনি একটি আইকনে ওয়ান-টু-ওয়ান ম্যাপিং সেট আপ করতে পারেন, যেমন DESTINATION_LEFT
এবং DESTINATION_RIGHT
। যাইহোক, যেহেতু কিছু কৌশল একই রকম, আপনি একটি আইকনে একাধিক কৌশল ম্যাপ করতে চাইতে পারেন। উদাহরণস্বরূপ TURN_LEFT
এবং ON_RAMP_LEFT
উভয়ই বাম দিকের বাঁক আইকনে ম্যাপ করতে পারে৷
কিছু কৌশলে একটি অতিরিক্ত clockwise
বা counterclockwise
লেবেল থাকে, যা SDK একটি দেশের ড্রাইভিং সাইডের উপর ভিত্তি করে নির্ধারণ করে। উদাহরণস্বরূপ, যেসব দেশে গাড়ি চালানো রাস্তার বাম দিকে, চালকরা ঘড়ির কাঁটার দিকে একটি রাউন্ডঅবাউট বা ইউ-টার্ন নেয়, যেখানে রাস্তার ডানদিকের দেশগুলি ঘড়ির কাঁটার দিকে যায়। নেভিগেশন SDK শনাক্ত করে যে বাম- বা ডান-পাশের ট্র্যাফিকের মধ্যে একটি কৌশল সংঘটিত হয় এবং উপযুক্ত কৌশল আউটপুট করে। অতএব, আপনার কৌশল আইকন ঘড়ির কাঁটার বিপরীতে ঘড়ির কাঁটার বিপরীতে কৌশলের জন্য আলাদা হতে পারে।
বিভিন্ন কৌশলের উদাহরণ আইকন দেখতে প্রসারিত করুন
নমুনা আইকন | TurnByTurn কৌশল |
---|---|
DEPART UNKNOWN | |
STRAIGHT ON_RAMP_UNSPECIFIED OFF_RAMP_UNSPECIFIED NAME_CHANGE | |
TURN_RIGHT ON_RAMP_RIGHT | |
TURN_LEFT ON_RAMP_LEFT | |
TURN_SLIGHT_RIGHT ON_RAMP_SLIGHT_RIGHT OFF_RAMP_SLIGHT_RIGHT | |
TURN_SLIGHT_LEFT ON_RAMP_SLIGHT_LEFT OFF_RAMP_SLIGHT_LEFT | |
TURN_SHARP_RIGHT ON_RAMP_SHARP_RIGHT OFF_RAMP_SHARP_RIGHT | |
TURN_SHARP_LEFT ON_RAMP_SHARP_LEFT OFF_RAMP_SHARP_LEFT | |
TURN_U_TURN_COUNTERCLOCKWISE ON_RAMP_U_TURN_COUNTERCLOCKWISE OFF_RAMP_U_TURN_COUNTERCLOCKWISE | |
TURN_U_TURN_CLOCKWISE ON_RAMP_U_TURN_CLOCKWISE OFF_RAMP_U_TURN_CLOCKWISE | |
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE | |
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE | |
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE | |
ROUNDABOUT_RIGHT_CLOCKWISE | |
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE | |
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE | |
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE | |
ROUNDABOUT_STRAIGHT_CLOCKWISE | |
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE | |
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE | |
ROUNDABOUT_LEFT_COUNTERCLOCKWISE | |
ROUNDABOUT_LEFT_CLOCKWISE | |
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE | |
ROUNDABOUT_SHARP_LEFT_CLOCKWISE | |
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE | |
ROUNDABOUT_U_TURN_CLOCKWISE | |
ROUNDABOUT_COUNTERCLOCKWISE | |
ROUNDABOUT_CLOCKWISE | |
ROUNDABOUT_EXIT_COUNTERCLOCKWISE | |
ROUNDABOUT_EXIT_CLOCKWISE | |
MERGE_RIGHT OFF_RAMP_RIGHT | |
MERGE_LEFT OFF_RAMP_LEFT | |
FORK_RIGHT TURN_KEEP_RIGHT ON_RAMP_KEEP_RIGHT OFF_RAMP_KEEP_RIGHT | |
FORK_LEFT TURN_KEEP_LEFT ON_RAMP_KEEP_LEFT OFF_RAMP_KEEP_LEFT | |
MERGE_UNSPECIFIED | |
DESTINATION | |
DESTINATION_RIGHT | |
DESTINATION_LEFT | |
FERRY_BOAT | |
FERRY_TRAIN |
তৈরি আইকন ব্যবহার করুন
অ্যান্ড্রয়েড অটো ব্যবহারের ক্ষেত্রে সুবিধার জন্য, নেভিগেশন SDK কৌশল এবং লেন নির্দেশিকা আইকন তৈরি করতে সহায়তা করে। এই আইকনগুলি অ্যান্ড্রয়েড অটো কার অ্যাপ লাইব্রেরির ইমেজ সাইজিং নির্দেশিকাকে মানানসই করে যা একটি 500 x 74 dp বাউন্ডিং বক্সকে লক্ষ্য করার সুপারিশ করে৷ বিস্তারিত জানার জন্য Android রেফারেন্স ডকুমেন্টেশনে setsLaneImage এবং CarIcon দেখুন।
আইকন প্রজন্মের উদাহরণ
NavigationUpdatesOptions options =
NavigationUpdatesOptions.builder()
.setNumNextStepsToPreview(numNextStepsToPreview)
.setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
.setDisplayMetrics(getResources().getDisplayMetrics())
.build();
boolean isRegistered =
navigator.registerServiceForNavUpdates(
getPackageName(),
NavInfoReceivingService.class.getName(),
options);
আপনি আইকন জেনারেশন সক্ষম করার পরে, TurnbyTurn StepInfo
অবজেক্ট আইকনগুলির সাথে ম্যানুভারবিটম্যাপ এবং লেনবিটম্যাপ ক্ষেত্রগুলিকে পপুলেট করে।
এরপর কি
- Android Auto অ্যাপের জন্য :