关闭应用程序后,保持连接广播接收器运行

安娜·玛丽亚·马丁内斯·戈麦斯

当我需要使用Internet连接并且无法使用时,我想设置一个广播接收器,如果应用程序关闭,它可以继续工作。

我正在为此使用一项服务,但是它无法正常工作。当应用程序在屏幕上或暂停时,它可以正常工作,但是如果我关闭它,它将停止工作。我不确定是否应该使用其他东西或做错了什么。

这是我的代码:

package com.example.ana.exampleapp;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.util.Log;

public class TestsService extends Service {

    private static BroadcastReceiver networkChangeReceiver;
    private static String TAG = "Service";

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

    @Override
    public void onCreate() {
        Log.v(TAG, "Service created");
        boolean keep = needTokeepWaiting()
        if(!keep)
            stopSelf();
    }

    @Override
    public void onDestroy() {
        if (networkChangeReceiver != null)
            unregisterReceiver(networkChangeReceiver);
        networkChangeReceiver = null;
        Log.v(TAG, "Service destroyed");
    }

    private void registerNetworkChangeReceiver() {
        networkChangeReceiver = new BroadcastReceiver() {
            private String TAG = "NetworkReceiver";

            @Override
            public void onReceive(Context context, Intent intent) {
                Log.v(TAG, "Connection changed received");
                            boolean keep = needTokeepWaiting()
                if(!keep)
                    stopSelf();
            }
        };
        IntentFilter filter = new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(networkChangeReceiver, filter);
    }
}

而我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ana.exampleapp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".RegisterActivity"></activity>
        <activity android:name=".FinishRegisterActivity"></activity>
        <activity android:name=".TestActivity"></activity>
        <activity android:name=".InformationActivity"></activity>
        <service android:name=".TestsService"></service>
    </application>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

并在有必要的时候在TestActivity中执行以下操作:

Intent service = new Intent(this, TestsService.class);
startService(service);

我正在做的事情与这里建议的类似,但是不起作用:

关闭应用程序后,保持广播接收器运行

我也尝试过在没有服务的情况下在清单中进行注册,但是它也不起作用:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ana.exampleapp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".RegisterActivity">
        </activity>
        <activity android:name=".FinishRegisterActivity" >
        </activity>
        <activity android:name=".TestActivity">
        </activity>
        <activity android:name=".InformationActivity" >
        </activity>
        <receiver android:name=".NetworkChangeReceiver"
            android:enabled="false">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
        </receiver>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
安娜·玛丽亚·马丁内斯·戈麦斯

我刚刚发现了问题。Android 4.4.x中存在一个错误,该错误会在关闭应用程序时终止后台服务。我正在Android 4.4.2中测试我的应用程序。这里有详细的解释:

http://www.androidpolice.com/2014/03/07/bug-watch-stopping-apps-on-android-4-4-2-can-silently-kill-related-background-services-a-fix-正在路上/

所以我的代码是正确的,就像我在Android 4.2.2中尝试过的那样,并且它可以工作(我尝试了重写,onStartCommand()所以也许需要这样做)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

关闭应用程序后,保持连接广播接收器运行

来自分类Dev

从广播接收器关闭应用程序

来自分类Dev

在应用关闭时从广播接收器运行任务[Android]

来自分类Dev

Xamarin.Forms:应用程序关闭时,广播接收器不起作用

来自分类Dev

访问广播接收器中的应用程序类

来自分类Dev

整个应用程序中的广播接收器

来自分类Dev

应用程序销毁时的广播接收器

来自分类Dev

广播接收器预先安装的应用程序

来自分类Dev

仅当在Android Pie中关闭应用程序时,广播接收器才起作用

来自分类Dev

如何使我的SMS应用程序成为接收广播接收器的最高优先级

来自分类Dev

应用关闭时如何检测广播接收器?

来自分类Dev

在android中卸载应用程序时呼叫广播接收器

来自分类Dev

设置广播接收器以获取其他应用程序使用的权限

来自分类Dev

启动应用程序而没有任何活动,我的广播接收器不起作用

来自分类Dev

广播接收器在某些设备上使应用程序崩溃

来自分类Dev

广播接收器,服务和活动共享应用程序对象吗?

来自分类Dev

当应用程序被杀死时,android广播接收器不监听

来自分类Dev

多个广播接收器未被称为不幸停止的应用程序

来自分类Dev

为什么广播接收器不适用于服务应用程序 android?

来自分类Dev

错误:包含广播接收器的应用程序的“未找到默认活动”

来自分类Dev

当应用程序不在最近时,在后台广播接收器

来自分类Dev

从另一个应用程序活动广播时广播接收器不显示结果

来自分类Dev

广播接收器和屏幕关闭

来自分类Dev

在腻子终端关闭后保持播放应用程序运行

来自分类Dev

关闭终端后如何保持应用程序运行?

来自分类Dev

在WPF中关闭事件后保持应用程序运行

来自分类Dev

关闭终端后如何保持应用程序运行?

来自分类Dev

仅接收器应用程序停止 - 通道关闭(smfclient 2)没有错误

来自分类Dev

Windows 2008 Server RemoteApp。与服务器断开连接后如何保持应用程序运行

Related 相关文章

  1. 1

    关闭应用程序后,保持连接广播接收器运行

  2. 2

    从广播接收器关闭应用程序

  3. 3

    在应用关闭时从广播接收器运行任务[Android]

  4. 4

    Xamarin.Forms:应用程序关闭时,广播接收器不起作用

  5. 5

    访问广播接收器中的应用程序类

  6. 6

    整个应用程序中的广播接收器

  7. 7

    应用程序销毁时的广播接收器

  8. 8

    广播接收器预先安装的应用程序

  9. 9

    仅当在Android Pie中关闭应用程序时,广播接收器才起作用

  10. 10

    如何使我的SMS应用程序成为接收广播接收器的最高优先级

  11. 11

    应用关闭时如何检测广播接收器?

  12. 12

    在android中卸载应用程序时呼叫广播接收器

  13. 13

    设置广播接收器以获取其他应用程序使用的权限

  14. 14

    启动应用程序而没有任何活动,我的广播接收器不起作用

  15. 15

    广播接收器在某些设备上使应用程序崩溃

  16. 16

    广播接收器,服务和活动共享应用程序对象吗?

  17. 17

    当应用程序被杀死时,android广播接收器不监听

  18. 18

    多个广播接收器未被称为不幸停止的应用程序

  19. 19

    为什么广播接收器不适用于服务应用程序 android?

  20. 20

    错误:包含广播接收器的应用程序的“未找到默认活动”

  21. 21

    当应用程序不在最近时,在后台广播接收器

  22. 22

    从另一个应用程序活动广播时广播接收器不显示结果

  23. 23

    广播接收器和屏幕关闭

  24. 24

    在腻子终端关闭后保持播放应用程序运行

  25. 25

    关闭终端后如何保持应用程序运行?

  26. 26

    在WPF中关闭事件后保持应用程序运行

  27. 27

    关闭终端后如何保持应用程序运行?

  28. 28

    仅接收器应用程序停止 - 通道关闭(smfclient 2)没有错误

  29. 29

    Windows 2008 Server RemoteApp。与服务器断开连接后如何保持应用程序运行

热门标签

归档