java - 服务在强制关闭时重新启动并使用 Android 重新启动

标签 java android service broadcastreceiver manifest

我实际上正在开发一个 Android 应用程序,允许 parent 跟踪他的 child 。我面临的问题是 GPS 定位需要每 N 秒执行一次,但每当我强制关闭应用程序或重新启动移动设备时,服务都不会重新启动。

这是我的定位服务:

public class LocationService extends Service
{
    private LocationListener listener;
    private LocationManager manager;

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

    @Override
    public void onCreate()
    {
        super.onCreate();
        Toast.makeText(this, "Service.onCreate()", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();
        Toast.makeText(this, "Service.destroy()", Toast.LENGTH_LONG).show();
        if(this.manager != null)
            //noinspection MissingPermission
            this.manager.removeUpdates(this.listener);
    }

    @Override
    public int onStartCommand(Intent intent, int flag, int startId)
    {
        super.onStartCommand(intent, flag, startId);

        //Here end the code to execute
        Toast.makeText(this, "Service.onStartCommand()",Toast.LENGTH_LONG).show();

        this.listener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                Log.e("started", "service running");
                play();
                Toast.makeText(LocationService.this, location.getLongitude() + " " + location.getLatitude(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) {

            }

            @Override
            public void onProviderEnabled(String s) {

            }

            @Override
            public void onProviderDisabled(String s) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            }
        };

        this.manager = (LocationManager)getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

        //noinspection MissingPermission
        this.manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000,0, this.listener);

        return START_NOT_STICKY;
    }

    @Override
    public boolean onUnbind(Intent intent)
    {
        // TODO Auto-generated method stub
        Toast.makeText(this, "Service.onUnbind()", Toast.LENGTH_LONG).show();
        return super.onUnbind(intent);
    }
}

我的广播接收器:

public class BootIntentReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Intent serviceIntent = new Intent(context, LocationService.class);
        serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startService(serviceIntent);
    }
}

我的 list .xml:

<receiver android:name=".activity.service.BootIntentReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
<service
    android:name=".activity.service.LocationService"
    android:exported="false" />

开机权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

每当我启动设备时没有任何反应:/

谢谢大家的帮助!

最佳答案

您是否尝试在 list 中为您的服务使用完全限定的包名称?

例如如果服务在包中 com.package.activity.service使用 <receiver android:name="com.package.activity.service.BootIntentReceiver">而不仅仅是 <receiver android:name=".activity.service.BootIntentReceiver">

然后在你的 BootIntentReceiver 中放入日志或 Toast , 只是为了加倍确定

关于java - 服务在强制关闭时重新启动并使用 Android 重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41664464/

相关文章:

android - 如何在 Firestore 中查询包含已发送参数的文档?

android - 当应用程序进入后台时,将数据从 Android 设备发送到服务器

android - 当操作系统杀死其中一个服务时,同一进程中的所有服务是否都被杀死?

java - 如何使用 NetBeans Gui Builder 将 JLabel 居中?

java - ExoPlayer,MediaSource 创建的视频播放器不播放从 URL 中提取的视频

java - 从左到右调用实例/静态方法?

Android:应用内购买 - Google Analytics

java - 您可以通过对象条件而不是索引从数组中删除对象吗?

java - 只返回某些字段的查询?

java - LayoutInflater 异常