如何使用 Intent 启动 Google Map 活动

Posted

技术标签:

【中文标题】如何使用 Intent 启动 Google Map 活动【英文标题】:How to start Google Map activity, with Intent 【发布时间】:2018-05-10 00:19:48 【问题描述】:

我创建了活动:MapsActivity,它会在地图上显示我的位置。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback 

private GoogleMap mMap;
private LocationManager locationManager;


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);



@Override
public void onMapReady(GoogleMap googleMap) 
    mMap = googleMap;

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false));
    double lat = location.getLatitude();
    double lng = location.getLongitude();

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 

        return;
    
    mMap.setMyLocationEnabled(true);
    // Add a marker in Sydney and move the camera
    LatLng place = new LatLng(lat,lng);
    mMap.addMarker(new MarkerOptions().position(place).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(place));


我创建了MainActivity,有一个按钮,我想点击它来移动到MapsActivity,这里是代码:

public class MainActivity extends AppCompatActivity 

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


public void showMyLocation(View view)
    Intent intentControls = new Intent(this, MapsActivity.class);
    startActivity(intentControls);


分级

    android 
    compileSdkVersion 27
    buildToolsVersion "27.0.1"
    defaultConfig 
        applicationId "com.example.lukasz.aaaaa"
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    


dependencies 
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', 
        exclude group: 'com.android.support', module: 'support-annotations'
    )

    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile 'com.google.android.gms:play-services-maps:10.2.6'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'
    testCompile 'junit:junit:4.12'

AndroidManifest

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.lukasz.aaaaa">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />

    <activity
        android:name=".MapsActivity"
        android:label="@string/title_activity_maps">
    </activity>

    <activity android:name=".MainActivity"
              android:label="Mapy">>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

问题是,在我单击 MainActivity 中的按钮后,应用程序崩溃了

致命异常:主要 进程:com.example.lukasz.aaaaa,PID:2433 java.lang.IllegalArgumentException:无效的提供者:null 在 android.location.LocationManager.checkProvider(LocationManager.java:2099) 在 android.location.LocationManager.getLastKnownLocation(LocationManager.java:1200) 在 com.example.lukasz.aaaaa.MapsActivity.onMapReady(MapsActivity.java:56) 在 com.google.android.gms.maps.SupportMapFragment$zza$1.zza(未知来源:7) 在 com.google.android.gms.maps.internal.zzt$zza.onTransact(未知来源:30) 在 android.os.Binder.transact(Binder.java:627) 在 gl.b(:com.google.android.gms.DynamiteModulesB@11577470:20) 在 com.google.android.gms.maps.internal.bf.a(:com.google.android.gms.DynamiteModulesB@11577470:5) 在 com.google.maps.api.android.lib6.impl.bc.run(:com.google.android.gms.DynamiteModulesB@11577470:5) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)r

我的问题是如何使用 Intent 从另一个 Activity 运行 Google Map Activity?

【问题讨论】:

发布你的 Gradle 文件。 发布完整的异常日志... 更新了问题 【参考方案1】:

保持低于应用标签上方的权限

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.INTERNET" />
     <application
          ......
          .....
    <activity>

          .....
   </activity>

</application>

(或)

您很可能会收到此错误,因为无法使用 GPS Providers。如果Gps,请让该人检查设置 Provider 或 Network Provider 已启用到Location 设置。

【讨论】:

这没有帮助 @LucasPG 发布您已完成的Log 以及您的Gradle 文件 检查编辑 @LucasPG 看这个***.com/questions/10687409/…

以上是关于如何使用 Intent 启动 Google Map 活动的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Intent 在 android TV 上启动 amazon prime video 应用程序

如何在 Compose 函数的按钮单击中启动 Intent

如何从我的应用程序中打开标准的 Google Map 应用程序?

如何将变量从 AsyncTask 返回到 Android 中的 Google Map 活动

Android Google Play Intent 引荐来源网址

启动应用程序(如果已安装),或使用安装引荐来源网址打开 Google Play