当从最近的应用列表中删除应用时,BroadcastReceiver不工作

时间:2016-10-01 17:51:54

标签: android service broadcastreceiver

我有一个类“ConnectivityChangeReceiver”类,它扩展了BroadCastReceiver:

public class ConnectivityChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent intentPostTelemetry = new Intent(context.getApplicationContext(), PostTelemetryData.class);
    intentPostTelemetry.putExtra("isNetworkConnected", isConnected(context));
    context.startService(intentPostTelemetry);
}

public boolean isConnected(Context context) {
    ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    return networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected();
}

}

此ConnectivityChangeReceiver类调用PostTemetryData

public class PostTelemetryData extends IntentService {

public PostTelemetryData() {
    super("PostTelemetryData");
}

@Override
protected void onHandleIntent(Intent intent) {

    Bundle extras = intent.getExtras();
    boolean isNetworkConnected = extras.getBoolean("isNetworkConnected");
    if (isNetworkConnected == true) {
        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("TelemetryInfo", 0);
        String telemetryDetailsInfo = sharedPreferences.getString("TelemetryDetailsInfo", null);
        if (telemetryDetailsInfo != null && !telemetryDetailsInfo.isEmpty()) {
            saveTelemetryData(telemetryDetailsInfo);
        }
    }
    // your code

}}

在清单中我添加以下代码:

 <receiver android:name=".ConnectivityChangeReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>
    <service android:name=".PostTelemetryData"/>

此连接更改时,此广播接收器启动。 当应用程序运行时,一切正常。但是当应用程序关闭并从最近的应用程序列表中删除时,广播接收器无法正常工作因此我无法保存数据。所以请帮助我解决这个问题。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

问题可能是你的设备在onReceive()完成后会进入休眠状态,因此你的IntentService无法做到这一点。

尝试使用此功能 - https://github.com/commonsguy/cwac-wakeful

更简单地说,我们在BroadcastReceiver的onReceive()方法中获取WakeLock,然后启动服务并在IntentService的onHandleIntent()方法中释放wakelock。

如果有效,请告诉我。

答案 1 :(得分:0)

你真的不能做你想做的事。没有办法让您的应用程序永远运行,并且您只能抓住运行应用程序的ACTION_BATTERY_*