私は Android を初めて使用し、基本的な GPS 情報表示プログラムで問題が発生しています。プログラムが予期せず停止しています。提案やコメントをいただければ幸いです。
Android Development Tools を使用して、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>