我是Android新手,遇到基本GPS信息显示程序的困难。该程序意外停止。如果您有任何建议或意见,我将不胜感激。
我使用Android开发工具在Eclipse中为Android 2.3.3编码。
我在下面给出了相关的代码部分,但为方便起见,项目存档于此处:
http://www.filedropper.com/showdownload.php/2013-06-05t1434gps1
代码部分如下:
Main.java:
package com.example.gps_1;
import android.app.Activity;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class Main extends Activity implements LocationListener {
/* This class implements LocationListener, which listens for both changes in
* the location of the device and changes in the status
* of the GPS system.
* */
static final String tag = "Main"; // for Log
TextView txtInfo;
LocationManager lm;
StringBuilder sb;
int noOfFixes = 0;
/** called when the activity is first created */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* Have TextView display the GPS data.
* */
txtInfo = (TextView) findViewById(R.id.textInfo);
/* The location manager is allows access to location and GPS status
* services.
* */
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
}
@Override
protected void onResume() {
/* onResume is called after onStart even if the program has not been paused.
*
* Add location listener and request updates every 1000 ms or 10 m.
*/
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10f, this);
super.onResume();
}
@Override
protected void onPause() {
/* GPS has non-negligible battery consumption.*/
lm.removeUpdates(this);
super.onPause();
}
@Override
public void onLocationChanged(Location location) {
Log.v(tag, "location changed");
sb = new StringBuilder(512);
noOfFixes++;
/* Display some of the information in the TextView. */
sb.append("number of fixes: ");
sb.append(noOfFixes);
sb.append('\n');
sb.append('\n');
sb.append("longitude: ");
sb.append(location.getLongitude());
sb.append('\n');
sb.append("latitude: ");
sb.append(location.getLatitude());
sb.append('\n');
sb.append("altitiude: ");
sb.append(location.getAltitude());
sb.append('\n');
sb.append("accuracy: ");
sb.append(location.getAccuracy());
sb.append('\n');
sb.append("timestamp: ");
sb.append(location.getTime());
sb.append('\n');
txtInfo.setText(sb.toString());
}
@Override
public void onProviderDisabled(String provider) {
/* this is called if/when the GPS is disabled in settings */
Log.v(tag, "disabled");
/* bring up the GPS settings */
Intent intent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
@Override
public void onProviderEnabled(String provider) {
Log.v(tag, "enabled");
Toast.makeText(this, "GPS enabled", Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
/* This is called when the GPS status alters */
switch (status) {
case LocationProvider.OUT_OF_SERVICE:
Log.v(tag, "status changed: out of service");
Toast.makeText(this, "status changed: out of service",
Toast.LENGTH_SHORT).show();
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
Log.v(tag, "status changed: temporarily unavailable");
Toast.makeText(this, "status changed: temporarily unavailable",
Toast.LENGTH_SHORT).show();
break;
case LocationProvider.AVAILABLE:
Log.v(tag, "status changed: available");
Toast.makeText(this, "status changed: available",
Toast.LENGTH_SHORT).show();
break;
}
}
@Override
protected void onStop() {
/* upgrade: save the state */
finish();
super.onStop();
}
}
main.xml中:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Main" >
<TextView
android:id="@+id/textInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
答案 0 :(得分:1)
您是否已为清单文件添加了权限
答案 1 :(得分:0)
添加粗略位置权限也是因为精确位置权限仅在您的程序获取gps位置时,如果它从网络中获取位置您还必须添加粗略位置权限