在特定位置通过我的应用打开StreetView

时间:2018-06-28 12:39:25

标签: android google-maps google-street-view

我正在尝试通过我的Android应用在全景模式下打开Goog​​le StreetView。

我真的想打开Goog​​le StreetView而不是Google Maps,因为我想将它与使用VR Glass的Virtual Reality应用程序一起使用,该应用程序使用立体视图和全景模式。我想要的全景模式是这样的:https://youtu.be/3mQKGEnWxIw

以下代码打开StreetView应用程序:

PackageManager pm = this.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("com.google.android.street");
startActivity(intent);

但是它将在默认屏幕上打开。

编辑1:

我发现了如何打开街景的全景活动。首先,我列出了应用程序中可用的活动:

void listAppActivities(String packagename) {
    PackageManager pManager = getPackageManager();
    Intent startIntent = new Intent();
    startIntent.setPackage(packagename);

    List<ResolveInfo> activities = pManager.queryIntentActivities(startIntent, 0);
    for (ResolveInfo ri : activities) {
        System.out.println("getAppActivities::nome::" + ri.activityInfo.name);
    }

}

然后,我使用了活动com.google.vr.app.StreetViewApp.StreetViewApp。我可以使用以下代码直接启动StreetView Panorama Activity:

void openStreetView() {
    String packagename = "com.google.android.street";
    PackageManager pm = this.getPackageManager();
    Intent intent = pm.getLaunchIntentForPackage(packagename);
    intent.setComponent(new ComponentName(packagename, "com.google.vr.app.StreetViewApp.StreetViewApp"));
    startActivity(intent);
}

但是我仍然不知道如何将位置参数传递给StreetView。我该怎么办?

我已经使用URI进行过测试:

Uri gmmIntentUri;
//gmmIntentUri = Uri.parse("geo:"+lat+","+lng); // Test1
gmmIntentUri = Uri.parse("google.streetview:cbll="+lat+","+lng); // Test2
//gmmIntentUri = Uri.parse("http://maps.google.com/maps?ll="+lat+","+lng); // Test3
intent.setData(gmmIntentUri);

并使用Intent.putExtra:

intent.putExtra("cbll", lat+","+lng);
intent.putExtra("args", "cbll="+lat+","+lng);
intent.putExtra("lat", new Double(lat));
intent.putExtra("long", new Double(lng));
intent.putExtra("lng", new Double(lng));

但是没有成功。有谁知道如何在全景模式下将位置参数传递给StreetView App?

编辑2:

我发现,如果我使用“突出显示街景”链接或推荐位置,则可以通过传递URI Intent在“全景”模式下打开街景。我测试了以下链接:

https://www.google.com/streetview/#christmas-island/ethel-beach-2 https://www.google.com/streetview/#russian-landmarks/terskol-1 https://www.google.com/streetview/#day-of-the-dead-in-mexico/ofrenda-dia-de-muertos-zocalo

更多信息可以在这里找到: https://www.google.com/streetview/

但是仍然不知道如何传递通用位置。

1 个答案:

答案 0 :(得分:0)

在这里,您可以使用传递的坐标来打开Goog​​le Street View:

(我刚刚对其进行了测试,它可以按预期工作)

import subprocess
from subprocess import PIPE
file= r'C:\Users\NIA\Desktop\2.py'
x = 'python' + file + str(7) + str(8)

process = subprocess.Popen([x], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()

if stderr:
    print stderr
else:
    print stdout

您接近了!您犯的错误是您在第三个代码段中用错误的private void openStreetView (double latitude, double longitude) { Uri gmmIntentUri = Uri.parse ("google.streetview:cbll=" + latitude + "," + longitude); Intent mapIntent = new Intent (Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage ("com.google.android.apps.maps"); startActivity (mapIntent); } 覆盖了:)

以下是更多详细信息:https://developers.google.com/maps/documentation/urls/android-intents