আমার অ্যাপ্লিকেশনটির A থেকে বি পর্যন্ত Google মানচিত্রের দিকনির্দেশগুলি দেখাতে হবে, তবে আমি Google অ্যাপ্লিকেশনগুলিতে গুগল ম্যাপগুলি রাখতে চাই না - পরিবর্তে, আমি এটি একটি ইন্টেন্ট ব্যবহার করে এটি চালু করতে চাই। এটা কি সম্ভব? যদি হ্যাঁ, কিভাবে?
আমার অ্যাপ্লিকেশনটির A থেকে বি পর্যন্ত Google মানচিত্রের দিকনির্দেশগুলি দেখাতে হবে, তবে আমি Google অ্যাপ্লিকেশনগুলিতে গুগল ম্যাপগুলি রাখতে চাই না - পরিবর্তে, আমি এটি একটি ইন্টেন্ট ব্যবহার করে এটি চালু করতে চাই। এটা কি সম্ভব? যদি হ্যাঁ, কিভাবে?
উত্তর:
আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps?saddr=20.344,34.34&daddr=20.5666,45.345"));
startActivity(intent);
বর্তমান অবস্থান থেকে নেভিগেশন শুরু করতে, saddr
প্যারামিটার এবং মানটি সরান ।
অক্ষাংশ এবং দ্রাঘিমাংশের পরিবর্তে আপনি একটি আসল রাস্তার ঠিকানা ব্যবহার করতে পারেন। তবে এটি ব্যবহারকারীকে ব্রাউজার বা গুগল ম্যাপের মাধ্যমে এটি খোলার মধ্যে চয়ন করার জন্য একটি ডায়ালগ দেবে।
এটি সরাসরি নেভিগেশন মোডে গুগল ম্যাপগুলিকে জ্বালিয়ে দেবে:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
হালনাগাদ
মে 2017 এ গুগল সর্বজনীন, ক্রস-প্ল্যাটফর্ম গুগল ম্যাপস ইউআরএলগুলির জন্য নতুন এপিআই চালু করেছে:
https://developers.google.com/maps/documentation/urls/guide
আপনি নতুন এপিআইয়ের সাথে এজেন্টসও ব্যবহার করতে পারেন।
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
এটি সামান্য অফ-টপিক কারণ আপনি "দিকনির্দেশগুলি" চেয়েছিলেন, তবে আপনি অ্যান্ড্রয়েড ডকুমেন্টেশনে বর্ণিত জিও ইউআরআই স্কিমটিও ব্যবহার করতে পারেন:
http://developer.android.com/guide/appendix/g-app-intents.html
"জিও: অক্ষাংশ, দ্রাঘিমাংশ" ব্যবহার করে সমস্যা হ'ল গুগল ম্যাপগুলি কোনও পিন বা লেবেল ছাড়াই কেবলমাত্র আপনার বিন্দুতে কেন্দ্র করে।
এটি বেশ বিভ্রান্তিকর, বিশেষত যদি আপনাকে একটি সুনির্দিষ্ট জায়গার দিকে নির্দেশ করতে হয় বা / এবং দিকনির্দেশনা চাইতে হয়।
আপনি যদি আপনার জিওপয়েন্টটি লেবেল করতে "জিও: ল্যাট, লোন? কিউ = নাম" ক্যোয়ারী প্যারামিটারটি ব্যবহার করেন তবে এটি অনুসন্ধানের জন্য ক্যোয়ারীটি ব্যবহার করে এবং ল্যাট / লম্বা পরামিতিগুলি খারিজ করে দেয়।
দিকনির্দেশ বা অন্য কোনও ক্রিয়াকলাপ জিজ্ঞাসা করার সময় আমি লেট / লোন দিয়ে মানচিত্রকে কেন্দ্র করে একটি কাস্টম লেবেল সহ একটি পিন প্রদর্শন করার একটি উপায় পেয়েছি:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
দ্রষ্টব্য (@ দ্য নেল দ্বারা): মানচিত্র v.7 এ কাজ করছেন না (লেখার সময় সর্বশেষতম সংস্করণ)। স্থানাঙ্কগুলি উপেক্ষা করবে এবং প্রথম বন্ধনীর মধ্যে প্রদত্ত নামের সাথে কোনও বস্তুর সন্ধান করবে। অবস্থান সহ Google মানচিত্র .0.০.০ এর জন্যও লক্ষ্যমাত্রা দেখুন
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?
যদিও বর্তমান উত্তরগুলি দুর্দান্ত, তবে তাদের মধ্যে কেউই আমি যা খুঁজছিলাম ঠিক তেমন করেনি, আমি কেবল মানচিত্র অ্যাপটি খুলতে চেয়েছি, উত্সের অবস্থান এবং গন্তব্যের প্রত্যেকটির জন্য একটি নাম যুক্ত করতে চেয়েছি, জিও ইউআরআই স্কিম ব্যবহার করা আমার পক্ষে কাজ করবে না মোটেও এবং মানচিত্রের ওয়েব লিঙ্কটিতে লেবেল ছিল না তাই আমি এই সমাধানটি নিয়ে এসেছি, যা মূলত এখানে তৈরি অন্যান্য সমাধান এবং মন্তব্যের সংমিশ্রণ, আশা করি এটি এই প্রশ্নটি দেখার জন্য অন্যদের পক্ষে সহায়ক।
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f(%s)&daddr=%f,%f (%s)", sourceLatitude, sourceLongitude, "Home Sweet Home", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);
আপনার বর্তমান অবস্থানটি প্রারম্ভিক পয়েন্ট হিসাবে ব্যবহার করতে (দুর্ভাগ্যক্রমে আমি বর্তমান অবস্থানের লেবেল দেওয়ার কোনও উপায় খুঁজে পাইনি) তারপরে নিম্নলিখিতটি ব্যবহার করুন
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);
সম্পূর্ণতার জন্য, যদি ব্যবহারকারী মানচিত্র অ্যাপ্লিকেশন ইনস্টল না করে থাকে তবে এটি অ্যাক্টিভিটি নটফাউন্ডএক্সসেপশন ধরা ভাল ধারণা হতে চলেছে, তবে আমরা মানচিত্রের অ্যাপ্লিকেশন নিষেধাজ্ঞা ব্যতীত আবার ক্রিয়াকলাপ শুরু করতে পারি, আমরা নিশ্চিত হতে পারি যে আমরা কখনই পাব না টোস্টে শেষে যেহেতু ইন্টারনেট ব্রাউজারটিও এই ইউআরএল স্কিমটি চালু করার জন্য একটি বৈধ অ্যাপ্লিকেশন।
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", 12f, 2f, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
try
{
startActivity(intent);
}
catch(ActivityNotFoundException ex)
{
try
{
Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(unrestrictedIntent);
}
catch(ActivityNotFoundException innerEx)
{
Toast.makeText(this, "Please install a maps application", Toast.LENGTH_LONG).show();
}
}
পিএস আমার উদাহরণে ব্যবহৃত কোনও অক্ষাংশ বা দ্রাঘিমাংশ আমার অবস্থানের প্রতিনিধিত্বকারী নয়, কোনও সত্য অবস্থানের সাথে তুলনা করা শুদ্ধ কাকতালীয়, ওরফে আমি আফ্রিকা থেকে নই: পি
সম্পাদনা করুন:
দিকনির্দেশগুলির জন্য, একটি নেভিগেশন উদ্দেশ্য এখন google.navigation দ্বারা সমর্থিত
Uri navigationIntentUri = Uri.parse("google.navigation:q=" + 12f +"," + 2f);//creating intent with latlng
Intent mapIntent = new Intent(Intent.ACTION_VIEW, navigationIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
সর্বশেষতম ক্রস-প্ল্যাটফর্ম গুগল ম্যাপস ইউআরএলগুলি ব্যবহার করে : গুগল ম্যাপস অ্যাপটি অনুপস্থিত থাকলেও এটি ব্রাউজারে খুলবে open
উদাহরণ https://www.google.com/maps/dir/?api=1&origin=81.23444,67.0000&destination=80.252059,13.060604
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("www.google.com")
.appendPath("maps")
.appendPath("dir")
.appendPath("")
.appendQueryParameter("api", "1")
.appendQueryParameter("destination", 80.00023 + "," + 13.0783);
String url = builder.build().toString();
Log.d("Directions", url);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
বিভিন্ন মোড সহ ইন্টেন্ট ব্যবহার করে গুগল ম্যাপস খুলুন:
আমরা অভিপ্রায় ব্যবহার করে গুগল ম্যাপস অ্যাপ খুলতে পারি:
val gmmIntentUri = Uri.parse("google.navigation:q="+destintationLatitude+","+destintationLongitude + "&mode=b")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
এখানে "মোড = বি" সাইকেলের জন্য।
আমরা ড্রাইভিং, হাঁটাচলা এবং সাইক্লিং মোড সেট করে ব্যবহার করতে পারি:
আপনি গুগল ম্যাপের সাথে অভিপ্রায় সম্পর্কে আরও জানতে পারেন এখানে ।
দ্রষ্টব্য: যদি সাইকেল / গাড়ি / হাঁটার জন্য কোনও রাস্তা না থাকে তবে এটি আপনাকে "সেখানে উপায় খুঁজে পাচ্ছে না" দেখায়
আপনি আমার মূল উত্তরটি এখানে পরীক্ষা করতে পারেন ।
ভাল আপনি Intent.setClassName
পদ্ধতিটি ব্যবহার করে বিল্ট-ইন অ্যাপ্লিকেশন অ্যান্ড্রয়েড মানচিত্র খোলার চেষ্টা করতে পারেন ।
Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("geo:37.827500,-122.481670"));
i.setClassName("com.google.android.apps.maps",
"com.google.android.maps.MapsActivity");
startActivity(i);
একাধিক উপায় পয়েন্টগুলির জন্য, নিম্নলিখিতগুলিও ব্যবহার করা যেতে পারে।
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("https://www.google.com/maps/dir/48.8276261,2.3350114/48.8476794,2.340595/48.8550395,2.300022/48.8417122,2.3028844"));
startActivity(intent);
স্থানাঙ্কের প্রথম সেটটি হ'ল আপনার শুরুর অবস্থান। পরের সমস্তটি ওয়ে পয়েন্ট, প্লট করা রুট দিয়ে যায়।
শেষে শেষে "/ অক্ষাংশ, দ্রাঘিমাংশ" যুক্ত করে পথের পয়েন্টগুলি যুক্ত রাখুন। গুগল ডক্স অনুসারে আপাতদৃষ্টিতে 23 টি পয়েন্টের সীমা রয়েছে । এটি অ্যান্ড্রয়েডেও প্রযোজ্য কিনা তা নিশ্চিত নয়।
আপনি যদি বর্তমান দিক থেকে অক্ষাংশ এবং দ্রাঘিমাংশ দেখানোর আগ্রহী হন তবে আপনি এটি ব্যবহার করতে পারেন:
নির্দেশাবলী সর্বদা ব্যবহারকারীদের বর্তমান অবস্থান থেকে দেওয়া হয়।
নিম্নলিখিত ক্যোয়ারী আপনাকে এটি সম্পাদনে সহায়তা করবে। আপনি এখানে গন্তব্য অক্ষাংশ এবং দ্রাঘিমাংশ পাস করতে পারেন:
google.navigation:q=latitude,longitude
উপরে হিসাবে ব্যবহার করুন:
Uri gmmIntentUri = Uri.parse("google.navigation:q=latitude,longitude");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
বা যদি আপনি অবস্থানের মাধ্যমে দেখাতে চান তবে ব্যবহার করুন:
google.navigation:q=a+street+address
এখানে আরও তথ্য: অ্যান্ড্রয়েডের জন্য গুগল ম্যাপস ইন্টেন্টস
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
DirectionsView
স্ট্রিং হিসাবে দেওয়া হিসাবে বর্তমান অবস্থান এবং গন্তব্য অবস্থান হিসাবে উত্স অবস্থান সহ গুগল
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?f=d&daddr="+destinationCityName));
intent.setComponent(new ComponentName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
উপরের destinationCityName
অংশে প্রয়োজনীয় হিসাবে এটির একটি স্ট্রিং ভেরিয়েবল পরিবর্তন করা হয়েছে।
এটা চেষ্টা কর
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr="+src_lat+","+src_ltg+"&daddr="+des_lat+","+des_ltg));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);
আপনি যদি পয়েন্ট এ, পয়েন্ট বি জানেন (এবং এর মধ্যে যা কিছু বৈশিষ্ট্য বা ট্র্যাক রয়েছে) আপনি নিজের অভিপ্রায় সহ একটি কেএমএল ফাইল ব্যবহার করতে পারেন।
String kmlWebAddress = "http://www.afischer-online.de/sos/AFTrack/tracks/e1/01.24.Soltau2Wietzendorf.kml";
String uri = String.format(Locale.ENGLISH, "geo:0,0?q=%s",kmlWebAddress);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);
আরও তথ্যের জন্য, এই এসও উত্তর দেখুন
দ্রষ্টব্য: এই উদাহরণটি একটি নমুনা ফাইল ব্যবহার করে যা (মার্ 13 হিসাবে) এখনও অনলাইনে রয়েছে। যদি এটি অফলাইনে চলে যায় তবে অনলাইনে একটি কিমিএল ফাইল সন্ধান করুন এবং আপনার ইউআরএল পরিবর্তন করুন
প্রথমে আপনার এখন দরকার যা আপনি অন্তর্নিহিত অভিপ্রায়টি ব্যবহার করতে পারেন, অ্যান্ড্রয়েড ডকুমেন্টেশন আমাদের মানচিত্রের অভিপ্রায় বাস্তবায়নের জন্য একটি খুব সাধারণ সাধারণ অভিপ্রায় সরবরাহ করে যা আপনাকে দুটি পরামিতি সহ একটি নতুন অভিপ্রায় তৈরি করতে হবে
ক্রিয়াকলাপের জন্য আমরা ব্যবহার করতে পারি Intent.ACTION_VIEW
এবং উরির জন্য আমাদের এটি তৈরি করা উচিত, নীচে আমি ক্রিয়াকলাপ তৈরি করতে, তৈরি করতে এবং শুরু করতে একটি নমুনা কোড সংযুক্ত করেছি।
String addressString = "1600 Amphitheatre Parkway, CA";
/*
Build the uri
*/
Uri.Builder builder = new Uri.Builder();
builder.scheme("geo")
.path("0,0")
.query(addressString);
Uri addressUri = builder.build();
/*
Intent to open the map
*/
Intent intent = new Intent(Intent.ACTION_VIEW, addressUri);
/*
verify if the devise can launch the map intent
*/
if (intent.resolveActivity(getPackageManager()) != null) {
/*
launch the intent
*/
startActivity(intent);
}
<scheme>://<authority><absolute path>?<query>#<fragment>
, অস্বচ্ছ ইউআরআই নয় <scheme>:<opaque part>#<fragment>
। উপরের কোডটি নিম্নলিখিত ইউআরআই প্রদান করে: geo:/0%2C0?Eiffel%20Tower
যার ফলে গুগল ম্যাপস অ্যাপটি ক্রাশ হয়। এমনকি অফিসিয়াল ডকুমেন্টেশনও এই কারণে কাঁচা / অস্বচ্ছ ইউআরআই ব্যবহার করে। সঠিক কোডটি তখন হবে:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
লক্ষ্মণ সাঁই উল্লিখিত সর্বশেষ ক্রস-প্ল্যাটফর্ম উত্তরটি ব্যবহার করে একটি দুর্দান্ত কোটলিন সমাধান ...
কোনও অপ্রয়োজনীয় Uri.toString এবং Uri.parse না হলেও এই উত্তরটি পরিষ্কার এবং ন্যূনতম:
val intentUri = Uri.Builder().apply {
scheme("https")
authority("www.google.com")
appendPath("maps")
appendPath("dir")
appendPath("")
appendQueryParameter("api", "1")
appendQueryParameter("destination", "${yourLocation.latitude},${yourLocation.longitude}")
}.build()
startActivity(Intent(Intent.ACTION_VIEW).apply {
data = intentUri
})
আপনি এইভাবে অ্যান্ড্রয়েডে একটি অভিপ্রায় মাধ্যমে গুগল মানচিত্রের দিকনির্দেশগুলি চালু করতে পারেন
btn_search_route.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String source = et_source.getText().toString();
String destination = et_destination.getText().toString();
if (TextUtils.isEmpty(source)) {
et_source.setError("Enter Soruce point");
} else if (TextUtils.isEmpty(destination)) {
et_destination.setError("Enter Destination Point");
} else {
String sendstring="http://maps.google.com/maps?saddr=" +
source +
"&daddr=" +
destination;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(sendstring));
startActivity(intent);
}
}
});