【问题标题】:Keep a specific activity alive while switching between Activities在活动之间切换时保持特定活动处于活动状态
【发布时间】:2020-11-13 16:43:20
【问题描述】:

我的应用程序包含 6 个独立的活动,其中一个返回 GPS 协调,此活动在打开时完美运行,但首先我返回到主活动它停止更新位置。

详情: 我创建了一个GPS services 并在Manifest.xml 中调用它

<service android:name=".Services.GPS_Service" />

这是服务:

public class GPS_Service extends Service {

    private LocationListener listener;
    private LocationManager locationManager;


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @SuppressLint("MissingPermission")
    @Override
    public void onCreate() {
        listener = new LocationListener() {

            @Override
            public void onLocationChanged(Location location) {

                Intent i = new Intent("location_update");
                i.putExtra("Longitude", location.getLongitude());
                i.putExtra("Latitude", location.getLatitude());

                final Date date = new Date(location.getTime());
                final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");

                i.putExtra("time", sdf.format(date));
                sendBroadcast(i);
            }
            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) {

            }
            @Override
            public void onProviderEnabled(String s) {
            }
            @Override
            public void onProviderDisabled(String s) {
                Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(i);
            }
        };
        locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
        //noinspection MissingPermission
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 0, listener);
    }
    @SuppressLint("MissingPermission")
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (locationManager != null) {
            //noinspection MissingPermission
            locationManager.removeUpdates(listener);
        }
    }
}

【问题讨论】:

标签: android android-manifest locationmanager


【解决方案1】:

根据您的回答和您使用的措辞:“当它打开时,但首先我返回主要活动” - 我假设“我返回主要活动”您的意思是涉及 onBackPressed,或者只是一个调用了简单的finish()。出于这个原因,调用了 onDestroy 以便您的侦听器被取消,这就是它停止工作的原因。

【讨论】:

  • 谢谢你,richard,但它是与片段相同的东西/生命周期吗?我的意思是,如果我从一个片段转移到另一个片段,我会面临同样的行为吗?
  • 视情况而定,但如果导航相同,则可以
【解决方案2】:

您不能同时激活两个活动。您必须使用 Android 服务来更新位置。

【讨论】:

  • 按照 OP 示例,问题一定出在其他地方。确实只能同时激活一个活动,但后台活动不会停止接收更新的位置,除非在 onPause/onStop 中取消侦听器。
  • 感谢您抽出宝贵的时间回答我的问题,但它和片段的生命周期是一样的吗?我的意思是,如果我从一个片段转移到另一个片段,我会面临同样的行为吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 2022-12-31
  • 2022-01-23
相关资源
最近更新 更多