Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android非本机sip_Android_Android Intent_Broadcastreceiver_Sip - Fatal编程技术网

Android非本机sip

Android非本机sip,android,android-intent,broadcastreceiver,sip,Android,Android Intent,Broadcastreceiver,Sip,我正在开发一个应用程序,它使用非本机sip发送信号。我想知道当sip呼叫到达时,我的应用程序将如何得到通知。我知道,一般来说,我可以有目的地发送braodcast,并用接收器捕捉。本地sip就是这样工作的。但是对于一个非本地人,我如何才能做到这一点?我需要创建一个自定义接收器?我如何发送意图?我可以在json中序列化意图吗?在android上,应用程序可能会暂停(设备将进入深度睡眠)很短时间,但仍然可以让它们定期运行 首先,java应用程序应该实现一个服务。这将允许您的应用程序在后台运行: 在Y

我正在开发一个应用程序,它使用非本机sip发送信号。我想知道当sip呼叫到达时,我的应用程序将如何得到通知。我知道,一般来说,我可以有目的地发送braodcast,并用接收器捕捉。本地sip就是这样工作的。但是对于一个非本地人,我如何才能做到这一点?我需要创建一个自定义接收器?我如何发送意图?我可以在json中序列化意图吗?

在android上,应用程序可能会暂停(设备将进入深度睡眠)很短时间,但仍然可以让它们定期运行

首先,java应用程序应该实现一个服务。这将允许您的应用程序在后台运行:

在YourSipAppService.java中实现您的服务: (并从GUI代码开始)

在舱单中:

    <service
        android:name=".YourSipAppService"
        android:icon="@drawable/ic_launcher" >
    </service>
然后,当您需要具有完整的wifi电源时:

mWifiLock.acquire();
当您不再需要它时:

mWifiLock.release();
要宣布呼叫,您需要打开设备并在键盘护卫顶部显示活动。需要使用各种API,这可能取决于您希望支持的Android版本。以下是一些代码,显示如何设置和获取可添加到服务中的屏幕锁和键盘锁:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mScreenWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK |
                                 PowerManager.ACQUIRE_CAUSES_WAKEUP |
                                 PowerManager.ON_AFTER_RELEASE, 
                                 "YourSipAppServiceKeepScreenActive");
mScreenWakeLock.setReferenceCounted(false);
mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock = mKeyguardManager.newKeyguardLock("com.yoursipapp.unlockforincomingcall");
您将在接到呼叫时获得此锁:

mScreenWakeLock.acquire();
if (mKeyguardLock != null && Build.VERSION.SDK_INT < 21) {
    mKeyguardLock.disableKeyguard();
}
总之,完成所有这些操作后,您可以弹出来电活动:

  • 您的活动将显示在键盘护卫上方
  • 当接到电话时,手机/设备将打开
  • 需要时,wifi将具有全功率
这将是您需要在SIP实现中包括的内容。你需要在他们到达时处理
INVITE
s。我看到了,但是android怎么知道他们到达了邀请?你是实现SIP的人,所以你应该知道。我仍然理解这一点。Bau当我的应用程序未运行时,需要向它发出警告,提醒它已到达某个事件(邀请)。这就像推送通知。我知道我可以创建一个接收器来捕获来自Google GCm的通知。我想要类似的东西,只使用sip,与本机sip类似。你不需要推送通知,这就是为什么你有sip。这就是SIP为你做的。如果您不知道在哪里接收
INVITE
数据包,那么您要么没有编写自己的非本地SIP(如您所声称的),要么在编写过程中没有意识到。你可能在使用图书馆吗?
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mScreenWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK |
                                 PowerManager.ACQUIRE_CAUSES_WAKEUP |
                                 PowerManager.ON_AFTER_RELEASE, 
                                 "YourSipAppServiceKeepScreenActive");
mScreenWakeLock.setReferenceCounted(false);
mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock = mKeyguardManager.newKeyguardLock("com.yoursipapp.unlockforincomingcall");
mScreenWakeLock.acquire();
if (mKeyguardLock != null && Build.VERSION.SDK_INT < 21) {
    mKeyguardLock.disableKeyguard();
}
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                     WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
                     WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

  ...
}