满足条件时显示位置

时间:2021-04-13 21:06:26

标签: android android-activity location wear-os

我正在尝试创建一个穿戴应用程序,当心率达到某个值时,它将显示经度和纬度,但是当我尝试启动位置活动时,应用程序崩溃了。请耐心等待,因为我是 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>

0 个答案:

没有答案