React Native Android-几个小时后,自定义的BroadcastReceiver / Service被杀死

时间:2018-09-14 06:24:56

标签: javascript java android reactjs react-native

我正在使用React Native构建一个应用程序,该应用程序需要一项服务来检测未接来电并将其发送到服务器上,然后在电话状态栏中显示通知。

我决定编写自己的扩展来处理此问题,因为我没有找到任何满足我需要的节点模块。不幸的是,服务已在几个小时后被终止,我无法解决。基本上,我是JavaScript开发人员,Java的本机代码对我来说就像一个黑洞,所以我将非常感谢您的帮助。

该应用程序使用Headless JS向服务器发送数据,基本上所有扩展都基于文章:

我发现了一些类似的主题:

并尝试遵循此处描述的说明,但是所有这些解决方案仅与本机代码相关,而未使用React Native和Headless JS,因此我不知道该解决方案是否适合使用React Native的应用程序或可能(当然)我做错了。

这是我的AndroidManifest部分,负责服务和BroadcastReceiver:

def find_color(input):
   input = input.replace("rgb(","").replace(")","").replace(' ' , '' )
   return max(map(int,input.split(',')))
print(find_color("rgb(125, 50, 175)"))

我的CallLogService类:

(...)
<service android:name="com.app.service.CallLogService" />
<receiver android:name="com.app.receiver.CallLogReceiver">
    <intent-filter android:priority="0">
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>
(...)

我的CallLogReceiver类:

package com.app.service;
import android.content.Intent;
import android.os.Bundle;
import com.facebook.react.HeadlessJsTaskService;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.jstasks.HeadlessJsTaskConfig;
import javax.annotation.Nullable;

public class CallLogService extends HeadlessJsTaskService {

    @Nullable
    protected HeadlessJsTaskConfig getTaskConfig(Intent intent) {

        Bundle extras = intent.getExtras();
        return new HeadlessJsTaskConfig(
            "CallLog",
            extras != null ? Arguments.fromBundle(extras) : null,
            5000,
            true
        );
    }
}

我正在使用React Native 0.50.3

最后,我还有一个问题。我注意到重启电话后,该服务也被终止。我也该如何预防这种情况?


编辑: 我注意到,如果应用程序在后台运行,则在发送请求后,不会记录响应。

但是在触发新请求之后,应用程序将获得先前请求的响应。我正在使用package com.app.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import com.app.service.CallLogService; import com.facebook.react.HeadlessJsTaskService; public final class CallLogReceiver extends BroadcastReceiver { public final void onReceive(Context context, Intent intent) { (...) callerPhoneNumber = intent.getStringExtra("incoming_number"); Intent callIntent = new Intent(context, CallLogService.class); callIntent.putExtra("phone_number", callerPhoneNumber); context.startService(callIntent); HeadlessJsTaskService.acquireWakeLockNow(context); } } ajax

例如。

axios

当应用程序处于后台时,我有:

let callAjax = function(counter){ console.log('Request ' + counter); axios.get('/user?ID=12345') .then(function (resp) { console.log('Response ' + counter); }) }; callAjax(1); setTimeout(() => { callAjax(2); }, 5000);

5秒后

Request 1

当应用程序处于前台时,一切正常:

Response 1 Request 2

5秒后

Request 1 Response 1

0 个答案:

没有答案