Android 事物将 GPS 数据发送到 TextView
Android Things send GPS data to TextView
我正在使用 Android Things v1.0.1 和 Adafruit Ultimate GPS Breakout Board v3 Raspberry Pi 3.
我正在尝试在屏幕上显示 GPS 信息,特别是发送 Lat、Long , 海拔高度 和卫星数量 TextView
显示在显示器上,但我很挣扎。
我使用的NMEA驱动是这样的:Github / Android Things / Contrib Drivers / GPS
这是我的 MainActivity
:
public class MainActivity extends Activity {
private static final String UART_DEVICE_NAME = "UART0";
UartDevice mDevice;
NmeaGpsModule mGpsModule;
NmeaParser mGpsModuleCallback;
NmeaGpsDriver mGpsDriver;
LocationManager mLocMan;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("GPS Test");
try {
NmeaGpsDriver mGpsDriver = new NmeaGpsDriver(
MainActivity.this,
"UART0",
9600,
1.8f );
mGpsDriver.register();
} catch (IOException e) {
// couldn't configure the gps driver...
Log.w(TAG, "Couldn't configure the GPS driver");
}
mLocMan = (LocationManager) getSystemService(LOCATION_SERVICE);
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "No permission");
return;
}
mLocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,
0, 0, mLocList);
mLocMan.registerGnssStatusCallback(mStatusCallback);
mLocMan.addNmeaListener(mMessageListener);
Button gpsbtn = (Button) findViewById(R.id.gpsbtn);
gpsbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG, "Updating Location...");
}
}
);
}
private LocationListener mLocList = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Log.i(TAG, "Latitude: " + location.getLatitude());
Log.i(TAG, "Latitude: " + location.getLongitude());
Log.i(TAG, "Altitute: " + location.getAltitude());
TextView latbox = new TextView(MainActivity.this);
latbox.findViewById(R.id.latbox);
latbox.setText(location.getLatitude());
TextView longbox = new TextView(MainActivity.this);
longbox.findViewById(R.id.longbox);
longbox.setText(location.getLongitude());
TextView altbox = new TextView(MainActivity.this);
altbox.findViewById(R.id.altbox);
altbox.setText(location.getAltitude());
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) { }
@Override
public void onProviderEnabled(String provider) { }
@Override
public void onProviderDisabled(String provider) { }
};
/** Report satellite status */
private GnssStatus.Callback mStatusCallback = new GnssStatus.Callback() {
@Override
public void onStarted() {
Log.i(TAG, "GNSS Callback Started");
}
@Override
public void onStopped() {
Log.i(TAG, "GNSS Callback Stopped");
}
@Override
public void onFirstFix(int ttffMillis) {
Log.i(TAG, "On First Fix???");
}
@Override
public void onSatelliteStatusChanged(GnssStatus status) {
Log.i(TAG, "GNSS Status: " + status.getSatelliteCount() + " satellites.");
}
};
private OnNmeaMessageListener mMessageListener = new OnNmeaMessageListener() {
@Override
public void onNmeaMessage(String message, long timestamp) {
Log.v(TAG, "NMEA: " + message);
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (mDevice != null) {
try {
mDevice.close();
mDevice = null;
mGpsDriver.unregister();
mGpsDriver.close();
} catch (IOException e) {
Log.w(TAG, "Unable to close" + UART_DEVICE_NAME, e); }
}
}
activity_main.xml
:
<TextView
android:id="@+id/longbox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="60dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/loctext" />
<Button
android:id="@+id/gpsbtn"
style="@android:style/Widget.Button"
android:layout_width="267dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="32dp"
android:text="@string/gpsbtn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/altbox"
app:layout_constraintVertical_bias="0.447" />
<TextView
android:id="@+id/loctext"
android:layout_width="66dp"
android:layout_height="21dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:text="@string/loctext"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/citybox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/latbox" />
<TextView
android:id="@+id/lattext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="22dp"
android:text="@string/lattext"
app:layout_constraintEnd_toStartOf="@+id/latbox"
app:layout_constraintTop_toBottomOf="@+id/loctext" />
<TextView
android:id="@+id/longtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="22dp"
android:text="@string/longtext"
app:layout_constraintEnd_toStartOf="@+id/longbox"
app:layout_constraintTop_toBottomOf="@+id/loctext" />
<TextView
android:id="@+id/citytext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="28dp"
android:text="@string/citytext"
app:layout_constraintEnd_toStartOf="@+id/citybox"
app:layout_constraintTop_toBottomOf="@+id/lattext" />
<TextView
android:id="@+id/countrytext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="28dp"
android:text="@string/countrytext"
app:layout_constraintEnd_toStartOf="@+id/countrybox"
app:layout_constraintTop_toBottomOf="@+id/longtext" />
<TextView
android:id="@+id/latbox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/loctext" />
<TextView
android:id="@+id/countrybox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="60dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/longbox" />
<TextView
android:id="@+id/alttext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="30dp"
android:text="@string/alttext"
app:layout_constraintEnd_toStartOf="@+id/altbox"
app:layout_constraintTop_toBottomOf="@+id/citytext" />
<TextView
android:id="@+id/altbox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/citybox" />
<TextView
android:id="@+id/fixtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="30dp"
android:text="@string/fixtext"
app:layout_constraintEnd_toStartOf="@+id/fixbox"
app:layout_constraintTop_toBottomOf="@+id/countrytext" />
<TextView
android:id="@+id/fixbox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="60dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/countrybox" />
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="302dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintGuide_percent="0.5"
app:layout_constraintTop_toTopOf="parent" />
而是在 onLocationChanged()
方法中使用以下内容:
TextView latbox = (TextView) findViewById(R.id.latbox);
latbox.setText("" + location.getLatitude());
TextView longbox = (TextView) findViewById(R.id.longbox);
longbox.setText("" + location.getLongitude());
TextView altbox = (TextView) findViewById(R.id.altbox);
altbox.setText("" + location.getAltitude());
我正在使用 Android Things v1.0.1 和 Adafruit Ultimate GPS Breakout Board v3 Raspberry Pi 3.
我正在尝试在屏幕上显示 GPS 信息,特别是发送 Lat、Long , 海拔高度 和卫星数量 TextView
显示在显示器上,但我很挣扎。
我使用的NMEA驱动是这样的:Github / Android Things / Contrib Drivers / GPS
这是我的 MainActivity
:
public class MainActivity extends Activity {
private static final String UART_DEVICE_NAME = "UART0";
UartDevice mDevice;
NmeaGpsModule mGpsModule;
NmeaParser mGpsModuleCallback;
NmeaGpsDriver mGpsDriver;
LocationManager mLocMan;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("GPS Test");
try {
NmeaGpsDriver mGpsDriver = new NmeaGpsDriver(
MainActivity.this,
"UART0",
9600,
1.8f );
mGpsDriver.register();
} catch (IOException e) {
// couldn't configure the gps driver...
Log.w(TAG, "Couldn't configure the GPS driver");
}
mLocMan = (LocationManager) getSystemService(LOCATION_SERVICE);
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "No permission");
return;
}
mLocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,
0, 0, mLocList);
mLocMan.registerGnssStatusCallback(mStatusCallback);
mLocMan.addNmeaListener(mMessageListener);
Button gpsbtn = (Button) findViewById(R.id.gpsbtn);
gpsbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG, "Updating Location...");
}
}
);
}
private LocationListener mLocList = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Log.i(TAG, "Latitude: " + location.getLatitude());
Log.i(TAG, "Latitude: " + location.getLongitude());
Log.i(TAG, "Altitute: " + location.getAltitude());
TextView latbox = new TextView(MainActivity.this);
latbox.findViewById(R.id.latbox);
latbox.setText(location.getLatitude());
TextView longbox = new TextView(MainActivity.this);
longbox.findViewById(R.id.longbox);
longbox.setText(location.getLongitude());
TextView altbox = new TextView(MainActivity.this);
altbox.findViewById(R.id.altbox);
altbox.setText(location.getAltitude());
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) { }
@Override
public void onProviderEnabled(String provider) { }
@Override
public void onProviderDisabled(String provider) { }
};
/** Report satellite status */
private GnssStatus.Callback mStatusCallback = new GnssStatus.Callback() {
@Override
public void onStarted() {
Log.i(TAG, "GNSS Callback Started");
}
@Override
public void onStopped() {
Log.i(TAG, "GNSS Callback Stopped");
}
@Override
public void onFirstFix(int ttffMillis) {
Log.i(TAG, "On First Fix???");
}
@Override
public void onSatelliteStatusChanged(GnssStatus status) {
Log.i(TAG, "GNSS Status: " + status.getSatelliteCount() + " satellites.");
}
};
private OnNmeaMessageListener mMessageListener = new OnNmeaMessageListener() {
@Override
public void onNmeaMessage(String message, long timestamp) {
Log.v(TAG, "NMEA: " + message);
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (mDevice != null) {
try {
mDevice.close();
mDevice = null;
mGpsDriver.unregister();
mGpsDriver.close();
} catch (IOException e) {
Log.w(TAG, "Unable to close" + UART_DEVICE_NAME, e); }
}
}
activity_main.xml
:
<TextView
android:id="@+id/longbox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="60dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/loctext" />
<Button
android:id="@+id/gpsbtn"
style="@android:style/Widget.Button"
android:layout_width="267dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="32dp"
android:text="@string/gpsbtn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/altbox"
app:layout_constraintVertical_bias="0.447" />
<TextView
android:id="@+id/loctext"
android:layout_width="66dp"
android:layout_height="21dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:text="@string/loctext"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/citybox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/latbox" />
<TextView
android:id="@+id/lattext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="22dp"
android:text="@string/lattext"
app:layout_constraintEnd_toStartOf="@+id/latbox"
app:layout_constraintTop_toBottomOf="@+id/loctext" />
<TextView
android:id="@+id/longtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="22dp"
android:text="@string/longtext"
app:layout_constraintEnd_toStartOf="@+id/longbox"
app:layout_constraintTop_toBottomOf="@+id/loctext" />
<TextView
android:id="@+id/citytext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="28dp"
android:text="@string/citytext"
app:layout_constraintEnd_toStartOf="@+id/citybox"
app:layout_constraintTop_toBottomOf="@+id/lattext" />
<TextView
android:id="@+id/countrytext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="28dp"
android:text="@string/countrytext"
app:layout_constraintEnd_toStartOf="@+id/countrybox"
app:layout_constraintTop_toBottomOf="@+id/longtext" />
<TextView
android:id="@+id/latbox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/loctext" />
<TextView
android:id="@+id/countrybox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="60dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/longbox" />
<TextView
android:id="@+id/alttext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="30dp"
android:text="@string/alttext"
app:layout_constraintEnd_toStartOf="@+id/altbox"
app:layout_constraintTop_toBottomOf="@+id/citytext" />
<TextView
android:id="@+id/altbox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/citybox" />
<TextView
android:id="@+id/fixtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="30dp"
android:text="@string/fixtext"
app:layout_constraintEnd_toStartOf="@+id/fixbox"
app:layout_constraintTop_toBottomOf="@+id/countrytext" />
<TextView
android:id="@+id/fixbox"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="60dp"
android:layout_marginTop="16dp"
android:background="@android:drawable/editbox_background"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/countrybox" />
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="302dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintGuide_percent="0.5"
app:layout_constraintTop_toTopOf="parent" />
而是在 onLocationChanged()
方法中使用以下内容:
TextView latbox = (TextView) findViewById(R.id.latbox);
latbox.setText("" + location.getLatitude());
TextView longbox = (TextView) findViewById(R.id.longbox);
longbox.setText("" + location.getLongitude());
TextView altbox = (TextView) findViewById(R.id.altbox);
altbox.setText("" + location.getAltitude());