我正在尝试创建一个穿戴应用程序,当心率达到某个值时,它将显示经度和纬度,但是当我尝试启动位置活动时,应用程序崩溃了。请耐心等待,因为我是 android 开发的新手,我相信这两个活动都可以正常工作,但是当我尝试链接它们时,应用程序失败了。
主要活动:
public class MainActivity extends WearableActivity implements SensorEventListener {
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
max_heart_rate = 100;
cTextView = (TextView) findViewById(R.id.current);
cTextView.setText("Current Heart Rate: ...");
cTextView.setVisibility(View.VISIBLE);
mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE));
mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{android.Manifest.permission.BODY_SENSORS},
1);
// Enables Always-on
setAmbientEnabled();
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) {
String msg = "" + (int) event.values[0];
current_heart_rate = (int) event.values[0];
cTextView.setText("Current Heart Rate: " + current_heart_rate);
cTextView.setVisibility(View.VISIBLE);
Intent intent = new Intent(this, LocationActivity.class);
if (current_heart_rate >= max_heart_rate)
startActivity(intent);
}
}
位置活动:
public class LocationActivity extends AppCompatActivity {
..
public void updateLocInfo(Location location) {
lat = (TextView) findViewById(R.id.lat);
lng = (TextView) findViewById(R.id.lng);
alt = (TextView) findViewById(R.id.alt);
lat.setText("Latitude : " + location.getLatitude());
lng.setText("Longitude : " + location.getLongitude());
alt.setText("Altitude : " + location.getAltitude());
Log.i("location", location.toString() + "");
Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
try {
String userAddress = "Could not find Address";
List<Address> listaddress = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
if (listaddress != null && listaddress.size() > 0) {
Log.i("placeInfo", listaddress.get(0).toString());
userAddress = "Address : ";
userAddress += listaddress.get(0).getAddressLine(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location);
manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
listener = new LocationListener() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
} else {
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
Location location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
updateLocInfo(location);
}
}
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-feature android:name="android.hardware.type.watch" />
<application
android:allowBackup="true"
android:icon="@drawable/watch"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.DeviceDefault">
<activity android:name=".LocationActivity"></activity>
<uses-library
android:name="com.google.android.wearable"
android:required="true" />
<!--
Set to true if your app is Standalone, that is, it does not require the handheld
app to run.
-->
<meta-data
android:name="com.google.android.wearable.standalone"
android:value="true" />
<activity
android:name=".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>
</application>