能够写入Firebase实时数据库,直到重新启动WIFI连接

时间:2019-02-26 13:52:51

标签: android firebase-realtime-database

我创建了2个应用程序,一个客户端和一个服务器应用程序。当使用客户端应用的人在RDB上写东西时,这会在运行服务器应用的电话上触发一些事件,然后当服务器完成客户端所请求的操作时从RDB中删除。

每个应用程序都执行其操作(客户端写入和服务器删除条目),问题在电话不活动后出现,为了完成写入和删除操作,我需要关闭并打开wifi /移动数据连接。

下面有一个代码片段,该片段显示服务器应用程序如何尝试与Firebase RDB通信以删除客户端编写的条目,这种情况每次在服务器应用程序上结束通话时都会发生。顺便说一句,确实调用了onReceive方法,并且我认为此问题与此代码实现无关,因为我已经尝试了许多不同的方法来解决此问题,但均未成功。

public class CallStateReceiver extends BroadcastReceiver {

public static String prevState = TelephonyManager.EXTRA_STATE_IDLE;
private final String LOG_TAG = "CallStateReceiver";


@Override
public void onReceive(Context context, Intent intent) {


    final PendingResult pendingResult = goAsync();
    Task asyncTask = new Task(pendingResult, intent, context);
    asyncTask.execute();


}

private static class Task extends AsyncTask  {

    private final PendingResult pendingResult;
    private final Intent intent;
    String PREFS_NAME = "MyPrefsFile";
    SharedPreferences serverInfoPrefs;
    String serverName;
    AudioManager audioManager;

    private Task(PendingResult pendingResult, Intent intent, Context context) {
        this.pendingResult = pendingResult;
        this.intent = intent;
        serverInfoPrefs = context. getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);




    }

    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);
        pendingResult.finish();
    }

    @Override
    protected Object doInBackground(Object[] objects) {

        Bundle bundle = intent.getExtras();
        if (bundle == null) {
            return null;
        }


        serverName = serverInfoPrefs.getString("serverName", "Servidor1");

        String state = bundle.getString(TelephonyManager.EXTRA_STATE);

        if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)
                && !prevState.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)) {

            FirebaseDatabase.getInstance().getReference().child("servers").child(serverName).child("current")
                    .child("callRequest").removeValue();
            audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, 5, 0);
            MyAccessibilityService.onCallAlready = false;


        } 

        prevState = state;



        return null;
    }


}




}

我启用了调试日志记录和这一行(虽然不确定这是否与问题有关):

03-02 18:08:55.360 10832-10840/? W/SQLiteConnectionPool: A SQLiteConnection object for database '/data/data/com.google.android.gsf/databases/gservices.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.

还找到了this解决方案,但我不知道这对Firebase有何作用

0 个答案:

没有答案