gpt4 book ai didi

java - 来自 google 开发者页面 android 的位置示例

转载 作者:行者123 更新时间:2023-12-01 12:26:12 26 4
gpt4 key购买 nike

我正在尝试使用我在此页面上找到的示例获取位置对象:

http://developer.android.com/training/location/retrieve-current.html

我所做的代码如下所示:

package com.example.locationdocseg;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.LocationClient;

import android.location.Location;
import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.content.IntentSender;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener {
// Global constants
/*
* Define a request code to send to Google Play services
* This code is returned in Activity.onActivityResult
*/
private final static int
CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
LocationClient mLocationClient;
Location mCurrentLocation;
double current_latitude,current_longitude;

// Define a DialogFragment that displays the error dialog
public static class ErrorDialogFragment extends DialogFragment {
// Global field to contain the error dialog
private Dialog mDialog;
// Default constructor. Sets the dialog field to null
public ErrorDialogFragment() {
super();
mDialog = null;
}
// Set the dialog to display
public void setDialog(Dialog dialog) {
mDialog = dialog;
}
// Return a Dialog to the DialogFragment.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return mDialog;
}
}

/*
* Handle results returned to the FragmentActivity
* by Google Play services
*/
@Override
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
// Decide what to do based on the original request code
switch (requestCode) {

case CONNECTION_FAILURE_RESOLUTION_REQUEST :
/*
* If the result code is Activity.RESULT_OK, try
* to connect again
*/
switch (resultCode) {
case Activity.RESULT_OK :
/*
* Try the request again
*/

break;
}

}
}

private boolean servicesConnected() {
// Check that Google Play services is available
int resultCode =
GooglePlayServicesUtil.
isGooglePlayServicesAvailable(this);
// If Google Play services is available
if (ConnectionResult.SUCCESS == resultCode) {
// In debug mode, log the status
Log.d("Location Updates",
"Google Play services is available.");
// Continue
return true;
// Google Play services was not available for some reason.
// resultCode holds the error code.
} else {
// Get the error dialog from Google Play services
Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(
resultCode,
this,
CONNECTION_FAILURE_RESOLUTION_REQUEST);

// If Google Play services can provide an error dialog
if (errorDialog != null) {
// Create a new DialogFragment for the error dialog
ErrorDialogFragment errorFragment =
new ErrorDialogFragment();
// Set the dialog in the DialogFragment
errorFragment.setDialog(errorDialog);
// Show the error dialog in the DialogFragment
errorFragment.show(getSupportFragmentManager(),
"Location Updates");
}
return false;
}
}


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

mLocationClient = new LocationClient(this, this, this);

mCurrentLocation=mLocationClient.getLastLocation();

current_latitude=mCurrentLocation.getLatitude();
current_longitude=mCurrentLocation.getLongitude();
Toast.makeText(getApplicationContext(),current_latitude+" "+current_longitude,Toast.LENGTH_LONG).show();


}

protected void onStart() {
super.onStart();
// Connect the client.
mLocationClient.connect();
}

/*
* Called when the Activity is no longer visible.
*/
@Override
protected void onStop() {
// Disconnecting the client invalidates it.
mLocationClient.disconnect();
super.onStop();
}


@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
/*
* Google Play services can resolve some errors it detects.
* If the error has a resolution, try sending an Intent to
* start a Google Play services activity that can resolve
* error.
*/
if (connectionResult.hasResolution()) {
try {
// Start an Activity that tries to resolve the error
connectionResult.startResolutionForResult(
this,
CONNECTION_FAILURE_RESOLUTION_REQUEST);
/*
* Thrown if Google Play services canceled the original
* PendingIntent
*/
} catch (IntentSender.SendIntentException e) {
// Log the error
e.printStackTrace();
}
} else {
/*
* If no resolution is available, display a dialog to the
* user with the error.
*/
showDialog(connectionResult.getErrorCode());
}


}

@Override
public void onConnected(Bundle arg0) {
// Display the connection status
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();


}

@Override
public void onDisconnected() {
// Display the connection status
Toast.makeText(this, "Disconnected. Please re-connect.",
Toast.LENGTH_SHORT).show();


}

}

我收到以下错误,与使用连接有关:

10-11 10:18:11.515: E/AndroidRuntime(7539): FATAL EXCEPTION: main
10-11 10:18:11.515: E/AndroidRuntime(7539): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.locationdocseg/com.example.locationdocseg.MainActivity}: java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
10-11 10:18:11.515: E/AndroidRuntime(7539): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
10-11 10:18:11.515: E/AndroidRuntime(7539): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
10-11 10:18:11.515: E/AndroidRuntime(7539): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-11 10:18:11.515: E/AndroidRuntime(7539): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
10-11 10:18:11.515: E/AndroidRuntime(7539): at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 10:18:11.515: E/AndroidRuntime(7539): at android.os.Looper.loop(Looper.java:130)
10-11 10:18:11.515: E/AndroidRuntime(7539): at android.app.ActivityThread.main(ActivityThread.java:3689)
10-11 10:18:11.515: E/AndroidRuntime(7539): at java.lang.reflect.Method.invokeNative(Native Method)
10-11 10:18:11.515: E/AndroidRuntime(7539): at java.lang.reflect.Method.invoke(Method.java:507)
10-11 10:18:11.515: E/AndroidRuntime(7539): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
10-11 10:18:11.515: E/AndroidRuntime(7539): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
10-11 10:18:11.515: E/AndroidRuntime(7539): at dalvik.system.NativeStart.main(Native Method)
10-11 10:18:11.515: E/AndroidRuntime(7539): Caused by: java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
10-11 10:18:11.515: E/AndroidRuntime(7539): at com.google.android.gms.internal.ff.bT(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539): at com.google.android.gms.internal.hc.a(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539): at com.google.android.gms.internal.hc$c.bT(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539): at com.google.android.gms.internal.hb.getLastLocation(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539): at com.google.android.gms.internal.hc.getLastLocation(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539): at com.google.android.gms.location.LocationClient.getLastLocation(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539): at com.example.locationdocseg.MainActivity.onCreate(MainActivity.java:125)
10-11 10:18:11.515: E/AndroidRuntime(7539): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-11 10:18:11.515: E/AndroidRuntime(7539): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
10-11 10:18:11.515: E/AndroidRuntime(7539): ... 11 more

list 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.locationdocseg"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.locationdocseg.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
</application>

</manifest>

如何解决?请帮忙

最佳答案

将 getLastLocation 移至 onConnected 方法,在 onCreate 中为时过早,尚未连接。

      mCurrentLocation=mLocationClient.getLastLocation();

current_latitude=mCurrentLocation.getLatitude();
current_longitude=mCurrentLocation.getLongitude();
Toast.makeText(getApplicationContext(),current_latitude+"
"+current_longitude,Toast.LENGTH_LONG).show();

尝试将以上所有内容移至onConnected

关于java - 来自 google 开发者页面 android 的位置示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311211/

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