| | |
| | | package com.hdl.hdllinphonesdk.core.service; |
| | | |
| | | import static com.hdl.hdllinphonesdk.HDLLinphoneKit.HDLLinphoneKitNAME; |
| | | |
| | | import android.app.AlarmManager; |
| | | import android.app.Notification; |
| | | import android.app.NotificationChannel; |
| | | import android.app.NotificationManager; |
| | | import android.app.PendingIntent; |
| | | import android.app.Service; |
| | | import android.content.Context; |
| | | import android.content.Intent; |
| | | import android.content.pm.PackageInfo; |
| | | import android.content.pm.PackageManager; |
| | | import android.os.Binder; |
| | | import android.os.Build; |
| | | import android.os.Handler; |
| | | import android.os.IBinder; |
| | | import android.os.SystemClock; |
| | | import android.support.v4.app.NotificationCompat; |
| | | |
| | | |
| | | import com.google.gson.Gson; |
| | | import com.hdl.hdllinphonesdk.R; |
| | | import com.hdl.hdllinphonesdk.activity.HDLLinphoneIntercomActivity; |
| | | import com.hdl.hdllinphonesdk.activity.HDLLinphoneReverseCallActivity; |
| | | import com.hdl.hdllinphonesdk.core.callback.PhoneCallback; |
| | | import com.hdl.hdllinphonesdk.core.callback.RegistrationCallback; |
| | | import com.hdl.hdllinphonesdk.core.linphone.KeepAliveHandler; |
| | |
| | | import org.linphone.core.PayloadType; |
| | | import org.linphone.core.ProxyConfig; |
| | | import org.linphone.core.RegistrationState; |
| | | import org.linphone.core.ToneID; |
| | | import org.linphone.core.VideoActivationPolicy; |
| | | import org.linphone.core.VideoDefinition; |
| | | import org.linphone.core.tools.Log; |
| | |
| | | import java.util.Timer; |
| | | import java.util.TimerTask; |
| | | |
| | | import static com.hdl.hdllinphonesdk.HDLLinphoneKit.HDLLinphoneKitNAME; |
| | | |
| | | public class HDLLinphoneService extends Service { |
| | | private static final String START_LINPHONE_LOGS = " ==== HDLLinphoneService ===="; |
| | | // Keep a static reference to the Service so we can access it from anywhere in the app |
| | | private static HDLLinphoneService sInstance; |
| | | private volatile static HDLLinphoneService sInstance; |
| | | |
| | | private PendingIntent mKeepAlivePendingIntent; |
| | | private static PhoneCallback sPhoneCallback;//通话状态回调 |
| | |
| | | return sInstance.mCore; |
| | | } |
| | | |
| | | public class LinphoneBinder extends Binder { |
| | | |
| | | public HDLLinphoneService getService() { |
| | | return HDLLinphoneService.this; |
| | | } |
| | | } |
| | | |
| | | private final IBinder binder = new LinphoneBinder(); |
| | | |
| | | @Override |
| | | public IBinder onBind(Intent intent) { |
| | | return null; |
| | | return binder; |
| | | } |
| | | |
| | | /** |
| | |
| | | hdlStartForeground(); |
| | | initLinphone(); |
| | | Intent intent = new Intent(this, KeepAliveHandler.class); |
| | | mKeepAlivePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); |
| | | // mKeepAlivePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); |
| | | |
| | | if (android.os.Build.VERSION.SDK_INT >= 31) { |
| | | mKeepAlivePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_IMMUTABLE); |
| | | } else { |
| | | mKeepAlivePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); |
| | | } |
| | | |
| | | ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)).setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, |
| | | SystemClock.elapsedRealtime() + 60000, 60000, mKeepAlivePendingIntent); |
| | | } |
| | |
| | | @Override |
| | | public int onStartCommand(Intent intent, int flags, int startId) { |
| | | super.onStartCommand(intent, flags, startId); |
| | | /* if (sInstance != null) { |
| | | return START_STICKY; |
| | | }*/ |
| | | return START_STICKY; |
| | | } |
| | | |
| | | |
| | | public void initCore() { |
| | | |
| | | // If our Service is already running, no need to continue |
| | | if (sInstance != null) { |
| | | return START_STICKY; |
| | | } |
| | | |
| | | |
| | | // Our Service has been started, we can keep our reference on it |
| | | // From now one the Launcher will be able to call onServiceReady() |
| | |
| | | mTimer = new Timer("Linphone scheduler"); |
| | | mTimer.schedule(lTask, 0, 20); |
| | | |
| | | return START_STICKY; |
| | | } |
| | | |
| | | @Override |
| | |
| | | String basePath = getFilesDir().getAbsolutePath(); |
| | | Factory.instance().setLogCollectionPath(basePath); |
| | | Factory.instance().enableLogCollection(LogCollectionState.Enabled); |
| | | Factory.instance().setDebugMode(false, getString(R.string.app_name)); |
| | | Factory.instance().setDebugMode(true, "HDLLinphone"); |
| | | // Dump some useful information about the device we're running on |
| | | // HDLLog.I(START_LINPHONE_LOGS); |
| | | // dumpDeviceInformation(); |
| | |
| | | @Override |
| | | public void onRegistrationStateChanged(Core core, ProxyConfig proxyConfig, RegistrationState registrationState, String message) { |
| | | String state = registrationState.toString(); |
| | | HDLLog.i(START_LINPHONE_LOGS, "registrationState: " + state); |
| | | HDLLog.i(START_LINPHONE_LOGS, "registrationState: " + state + ",message:" + message); |
| | | |
| | | HDLLog.i(START_LINPHONE_LOGS, "Registration info=" + new Gson().toJson(proxyConfig)); |
| | | if (state.equals(RegistrationState.None.toString())) { |
| | | if (sRegistrationCallback != null) { |
| | | sRegistrationCallback.registrationNone(); |
| | |
| | | //2.设置VP8、H264、H265 等启用 |
| | | PayloadType[] ptVideoList = mCore.getVideoPayloadTypes(); |
| | | for (PayloadType pt : ptVideoList) { |
| | | // HDLLog.i("VideoPayload", pt.getMimeType()); |
| | | pt.enable(true); |
| | | HDLLog.i("VideoPayload", pt.getMimeType()); |
| | | if ("VP8".equals(pt.getMimeType())){ |
| | | pt.enable(false); |
| | | }else { |
| | | pt.enable(true); |
| | | } |
| | | } |
| | | mCore.setVideoPayloadTypes(ptVideoList); |
| | | } |