在睡眠期间保持Internet连接 - Softphone应用程序

时间:2014-05-23 13:49:53

标签: android broadcastreceiver android-wake-lock

我正在尝试创建一个可以使用用户凭据接收和拨打电话的软电话应用程序。我有一切正常,但我现在遇到的问题是让用户登录或注册到SIP客户端。我正在阅读许多文章,以便在我尝试连接时保持Wifi连接。我添加了一些我从其他程序获得的代码,即使这样也无法工作。

我真正需要的是一种让手机始终保持注册的方式。我知道可以通过Linphone和Bria这样的应用程序来完成它。有没有人有任何建议。

这是我的onNetworkChangeReceiver,用于侦听网络更改。如果此代码无效,请告诉我。如果您有任何建议,请告诉我们

import com.zxd.activity.util.PhoneState;

import android.content.Context;
import android.content.Intent;
import android.support.v4.content.WakefulBroadcastReceiver;

public class OnNetworkChangeReceiver extends WakefulBroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
      PhoneState phoneState = PhoneState.getInstance();
      // This is the Intent to deliver to our service.
      Intent service = new Intent(context, OnNetworkChangeListener.class);
      if(phoneState.threadIntent != null){
          WakefulBroadcastReceiver.completeWakefulIntent(phoneState.threadIntent);
      }
      phoneState.setThreadIntent(intent);
      // Start the service, keeping the device awake while it is launching.
      startWakefulService(context, service);
  }
}

PS:此接收器获得android.net.conn.CONNECTIVITY_CHANGE

这是OnNetworkChangeListener

import android.app.IntentService;
import android.content.Intent;
import android.support.v4.content.WakefulBroadcastReceiver;

import com.zxd.activity.SipManager;

public class OnNetworkChangeListener extends IntentService{
private static String TAG = "OnNetworkChangeListener";
private static Intent i;
public OnNetworkChangeListener() {
    super(TAG);
}

@Override
protected void onHandleIntent(Intent intent) {
    i = intent;
    SipManager sipManager = SipManager.getInstance();
    sipManager.onNetworkChange();
}

@Override
public void onDestroy(){
    super.onDestroy();
    if(i != null){
        WakefulBroadcastReceiver.completeWakefulIntent(i);
    }
}

}

4 个答案:

答案 0 :(得分:4)

我将此用于我的应用。但最终,这会损坏我的电池。

Android Developer Docs

Settings.System.putInt(getContentResolver(), Settings.System.WIFI_SLEEP_POLICY, Settings.System.WIFI_SLEEP_POLICY_NEVER);

答案 1 :(得分:0)

您是否尝试过使用WifiLock

答案 2 :(得分:0)

对于我的解决方案,我查看了linphone。它们是一个开源的软电话应用程序,它们有很好的方法来实现KeepAlive Service和KeepAlive Handler。这对我有用

答案 3 :(得分:0)

您尝试使用WakeLock吗?另请查看PowerManager类。

希望这有帮助。