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