gpt4 book ai didi

android - 带有 IntentChooser 的导航应用程序——这是同一个查询吗?

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:22 28 4
gpt4 key购买 nike

我尝试从我的应用程序调用导航。

我调用这个查询:

String link = "geo:" + posInfo.getLatitude() + "," + posInfo.getLongitude();
Intent navigateIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(link));
Intent chooser = Intent.createChooser(navigateIntent, ctx.getString(R.string.navigate_intent_chooser_title));
ctx.startActivity(chooser);

Intent 选择器显示 2 个应用程序:GoogleMaps 和 Waze。

Waze 的导航功能完美,但 Google map 的导航功能却不尽如人意。我显示了 map ,但没有导航说明。如果我直接使用 GoogleMaps,那么我可以导航,所以这与 Intent 参数的传递方式有关。

我在其他一些答案中读到我需要对谷歌地图使用另一个查询:

"google.navigation:q.."

我有两个问题:

  1. 我需要针对不同的导航应用进行不同的查询吗?
  2. 如果 1 为真,我如何将 intentChooser 用于不同的查询?

最佳答案

这是我的解决方案:

private static final String PERFIX_DEFAULT_NAVIGATE_LINK_BY_COORDINATES = "geo:";
private static final String PERFIX_DEFAULT_NAVIGATE_LINK_BY_ADDRESS = "geo:0,0?q=";
private static final String PERFIX_DEFAULT_GOOGLE_NAVIGATE = "google.navigation:q=";

private static Intent getChooserNavigateIntent(Context context, Intent navigateIntent, POSEntityInfo posInfo, boolean isCoordinates) {

// Check if there is a default app opener for this type of content.
final PackageManager packageManager = context.getPackageManager();
ResolveInfo defaultAppInfo = packageManager.resolveActivity(navigateIntent,
PackageManager.MATCH_DEFAULT_ONLY);


// create the intent for intent chooser
List<Intent> targetedOpenIntents = new ArrayList<Intent>();
List<ResolveInfo> appInfoList = packageManager.queryIntentActivities(navigateIntent,
PackageManager.MATCH_DEFAULT_ONLY);

for (ResolveInfo appInfo : appInfoList) {
String packageName = appInfo.activityInfo.packageName;
Intent targetedOpenIntent = new Intent(android.content.Intent.ACTION_VIEW).setPackage(packageName);
targetedOpenIntent = getNavigateIntent(appInfo, targetedOpenIntent, isCoordinates, posInfo);
targetedOpenIntents.add(targetedOpenIntent);
}

// create the intent chooser. delete the first member in the list(the default activity)
Intent chooserIntent = Intent.createChooser(targetedOpenIntents.remove(0),
context.getString(R.string.navigate_intent_chooser_title)).putExtra(Intent.EXTRA_INITIAL_INTENTS,
targetedOpenIntents.toArray(new Parcelable[]{}));

return chooserIntent;
}

private static Intent getNavigateIntent(ResolveInfo appInfo, Intent navigateIntent, boolean isCoordinates, POSEntityInfo posInfo) {
// link urls
final String GOOGLE_NAVIGATE_PACKAGE = "com.google.android.apps.maps";
String suffixAddressLink = posInfo.getStreet() + " " + posInfo.getStreetNum() + "," + posInfo.getCity();
String suffixCoordinatesLink = posInfo.getLatitude() + "," + posInfo.getLongitude();

boolean isGoogleMaps = GOOGLE_NAVIGATE_PACKAGE.equals(appInfo.activityInfo.packageName);

//build the link url
StringBuilder link = new StringBuilder();
link.append(isCoordinates ? (isGoogleMaps ? PERFIX_DEFAULT_GOOGLE_NAVIGATE : PERFIX_DEFAULT_NAVIGATE_LINK_BY_COORDINATES) : (isGoogleMaps ? PERFIX_DEFAULT_GOOGLE_NAVIGATE : PERFIX_DEFAULT_NAVIGATE_LINK_BY_ADDRESS));
link.append(isCoordinates ? suffixCoordinatesLink : suffixAddressLink);

Log.d(TAG, "Link = " + link);

return navigateIntent.setData(Uri.parse(link.toString()));
}

//只是用 >

结束标签

关于android - 带有 IntentChooser 的导航应用程序——这是同一个查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21276879/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com