Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用IntentChooser-it';是同一个问题吗?_Android_Google Maps_Maps - Fatal编程技术网

Android 使用IntentChooser-it';是同一个问题吗?

Android 使用IntentChooser-it';是同一个问题吗?,android,google-maps,maps,Android,Google Maps,Maps,我尝试从应用程序中调用导航 我打电话询问: 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.n

我尝试从应用程序中调用导航

我打电话询问:

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);
意向选择器显示两个应用程序:谷歌地图和Waze

Waze的导航功能非常好,但谷歌地图的导航功能却不起作用。我显示了地图,但没有导航说明。 如果我直接使用GoogleMaps,那么我就可以导航,这与如何传递意图参数有关

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

"google.navigation:q.."
我有两个问题:

  • 我是否需要对不同的导航应用进行不同的查询
  • 如果1为true,如何将intentChooser用于不同的查询
  • 这是我的解决方案:

    private static final String PERFIX_DEFAULT_NAVIGATE_LINK_BY_COORDINATES=“geo:”;
    私有静态最终字符串PERFIX_DEFAULT_NAVIGATE_LINK_BY_ADDRESS=“geo:0,0?q=”;
    私有静态最终字符串PERFIX_DEFAULT_GOOGLE_NAVIGATE=“GOOGLE.navigation:q=”;
    私有静态意图GetChooserNavigateContent(上下文上下文、意图NavigateContent、POSEntityInfo、posInfo、boolean isCoordinates){
    //检查是否有此类型内容的默认应用程序开启器。
    final-PackageManager-PackageManager=context.getPackageManager();
    ResolveInfo defaultAppInfo=packageManager.resolveActivity(NavigateContent,
    PackageManager.MATCH_(仅限默认值);
    //为意图选择器创建意图
    List targetedopingents=new ArrayList();
    List appInfoList=packageManager.QueryInputActivities(NavigateContent,
    PackageManager.MATCH_(仅限默认值);
    用于(ResolveInfo appInfo:appInfoList){
    字符串packageName=appInfo.activityInfo.packageName;
    Intent targetedopeninent=新的Intent(android.content.Intent.ACTION\u VIEW).setPackage(packageName);
    TargetDopentent=GetNavigateContent(appInfo、TargetDopentent、isCoordinates、posInfo);
    targetedopingents.add(targetedopingents);
    }
    //创建意图选择器。删除列表中的第一个成员(默认活动)
    Intent-chooserint=Intent.createChooser(targetedopingents.remove(0),
    context.getString(R.string.navigate\u intent\u chooser\u title)).putExtra(intent.EXTRA\u INITIAL\u INTENTS,
    TARGETEDOPENTINTS.toArray(新包裹[]{});
    返回选择器内容;
    }
    私有静态意图GetNavigateContent(ResolveInfo appInfo、意图NavigateContent、boolean isCoordinates、POSEntityInfo posInfo){
    //链接URL
    最后一个字符串GOOGLE\u NAVIGATE\u PACKAGE=“com.GOOGLE.android.apps.maps”;
    字符串后缀addresslink=posInfo.getStreet()+“”+posInfo.getStreetNum()+“”,“+posInfo.getCity()”;
    字符串后缀坐标链接=posInfo.getLatitude()+”,“+posInfo.getLatitude();
    布尔值isGoogleMaps=GOOGLE\u NAVIGATE\u PACKAGE.equals(appInfo.activityInfo.packageName);
    //构建链接url
    StringBuilder链接=新建StringBuilder();
    link.append(iCoordinates?(iGoogleMaps?PERFIX_DEFAULT_GOOGLE_NAVIGATE:PERFIX_DEFAULT_NAVIGATE_link_BY_坐标):(iGoogleMaps?PERFIX_DEFAULT_GOOGLE_NAVIGATE:PERFIX_DEFAULT_NAVIGATE_link_BY_ADDRESS));
    link.append(isCoordinates?supplexCoordinates链接:supplexAddressLink);
    Log.d(标签,“Link=“+Link”);
    返回navigateContent.setData(Uri.parse(link.toString());
    }
    

    //刚刚用>

    什么是首选项访问器关闭了标签,我实际如何使用它?首选项访问器是我的类,它在我的设备中保存首选项。你不需要使用这个类…因此,除了你自己,这实际上对任何人都没有帮助。我忍不住注意到,似乎只有你自己的答案才被接受,这些答案除了你自己之外,对任何人都没有帮助。作为社区的一部分,我会鼓励一些更友好的行为。@pc pdx,我认为这对每个需要使用谷歌地图和其他导航应用程序的人都有帮助
    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()));
    }