panlili2024
2024-11-13 848cbfebefab08cc49b0285155edb84463aed862
HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/core/service/HDLLinphoneService.java
@@ -1,25 +1,22 @@
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;
@@ -33,7 +30,6 @@
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;
@@ -46,12 +42,10 @@
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;//通话状态回调
@@ -84,9 +78,18 @@
        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;
    }
    /**
@@ -133,7 +136,14 @@
        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);
    }
@@ -141,11 +151,17 @@
    @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()
@@ -169,7 +185,6 @@
        mTimer = new Timer("Linphone scheduler");
        mTimer.schedule(lTask, 0, 20);
        return START_STICKY;
    }
    @Override
@@ -213,7 +228,7 @@
        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();
@@ -260,8 +275,9 @@
            @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();
@@ -379,8 +395,12 @@
        //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);
    }