Ahmet Singan
Ahmet Singan
İstanbul-II (Anadolu)
12/12/2018 tarihinden beri üye
10 GY Puanı
99K GY Sırası

Kişisel Sayfaları

İlgi Alanları

1 Rozet
0 Sertifika
1 Soru Sordu
0 Cevap Verdi
0 Blog Yazısı
0 Etiket Takibi

Hakkında

İş Tecrubesi

Kullanıcıya ait İş tecrübesi bilgisi bulunmamaktadır.

Eğitim Geçmişi

Hasan Kalyoncu Üniversitesi
| Aralık 2020 - Aralık 2020

Sertifikalar & Başarılar

GY Sertifikaları (0)
Kullanıcının GY sertifikası bulunmamaktadır.
Diğer Sertifikaları (0)
Kullanıcıya ait sertifika bulunmamaktadır.
Test Sonuçları (0)

Kullanıcıya ait test sonucu bulunmamaktadır.

Dil Becerileri

Son Forum Aktiviteleri

1
Tümünü Gör

AndroidRuntime: FATAL EXCEPTION Hatası

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.audiocodes.mv.webrtcclient, PID: 2551
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.audiocodes.mv.webrtcclient/com.audiocodes.mv.webrtcclient.Activities.SplashActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList com.audiocodes.mv.webrtcsdk.useragent.AudioCodesUA.getSessionList()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
        at android.app.ActivityThread.access$800(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList com.audiocodes.mv.webrtcsdk.useragent.AudioCodesUA.getSessionList()' on a null object reference
        at com.audiocodes.mv.webrtcclient.General.ACManager.getActiveSession(ACManager.java:139)
        at com.audiocodes.mv.webrtcclient.General.ACManager.isAllredyInActiveCall(ACManager.java:160)
        at com.audiocodes.mv.webrtcclient.General.NotificationUtils.createAppNotification(NotificationUtils.java:33)
        at com.audiocodes.mv.webrtcclient.Activities.BaseAppCompatActivity.onCreate(BaseAppCompatActivity.java:34)
        at com.audiocodes.mv.webrtcclient.Activities.SplashActivity.onCreate(SplashActivity.java:29)
        at android.app.Activity.performCreate(Activity.java:5990)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)

Hatayı anladığım kadarıyla sorun bu kodda.

package com.audiocodes.mv.webrtcclient.General;

import android.content.Intent;
import android.widget.Toast;

import com.audiocodes.mv.webrtcclient.Activities.CallActivity;
import com.audiocodes.mv.webrtcclient.Activities.IncomingCallActivity;
import com.audiocodes.mv.webrtcclient.Callbacks.CallBackHandler;
import com.audiocodes.mv.webrtcclient.Structure.CallEntry;
import com.audiocodes.mv.webrtcclient.Structure.SipAccount;
import com.audiocodes.mv.webrtcsdk.log.LogLevel;
import com.audiocodes.mv.webrtcsdk.session.ACCallStatistics;
import com.audiocodes.mv.webrtcsdk.session.AudioCodesSession;
import com.audiocodes.mv.webrtcsdk.session.AudioCodesSessionEventListener;
import com.audiocodes.mv.webrtcsdk.session.CallState;
import com.audiocodes.mv.webrtcsdk.session.DTMFOptions;
import com.audiocodes.mv.webrtcsdk.session.RemoteContact;
import com.audiocodes.mv.webrtcsdk.sip.enums.Transport;
import com.audiocodes.mv.webrtcsdk.useragent.ACConfiguration;
import com.audiocodes.mv.webrtcsdk.useragent.AudioCodesEventListener;
import com.audiocodes.mv.webrtcsdk.useragent.AudioCodesUA;
import com.audiocodes.mv.webrtcsdk.useragent.WebRTCException;

import org.webrtc.PeerConnection;

import java.util.ArrayList;
import java.util.Date;


public class ACManager implements AudioCodesEventListener {

    private static final String TAG = "ACManager";

    private static ACManager instance;
    private boolean registerState;

    public static synchronized ACManager getInstance() {
        if (instance == null) {
            instance = new ACManager();
        }
        return instance;
    }

    public void startLogin(){
        Log.d(TAG, "startLogin");
        boolean loginit=false;
        try {
            initACUA();
            loginit = true;
        } catch (Exception e) {
            Log.d(TAG, "can't set log level");
        }
        initWebRTC(Prefs.getSipAccount());

        try {
            AudioCodesUA.getInstance().login(MainApp.getGlobalContext().getApplicationContext());
            if(!loginit) {
                initACUA();
            }
        } catch (Exception e) {
            Log.d(TAG, "Error in login: "+e);
            Toast.makeText(MainApp.getGlobalContext(), "Error in login", Toast.LENGTH_SHORT).show();
        }
    }
    public void initACUA(){
        AudioCodesUA.getInstance().setLogger(new LogI());
        AudioCodesUA.getInstance().setLogLevel(LogLevel.VERBOSE);
    }

    public void startLogout(){
        Log.d(TAG, "startLogout");
        try {
            AudioCodesUA.getInstance().logout();
        } catch (Exception e) {
            Log.d(TAG, "Error in logout");
            //Toast.makeText(MainApp.getGlobalContext(), "Error in logout", Toast.LENGTH_SHORT).show();
        }
    }

    public void initWebRTC(SipAccount sipAccount) {
        String proxy=sipAccount.getProxy();
        int port = sipAccount.getPort();
        String domain = sipAccount.getDomain();
        Transport transport = sipAccount.getTransport();
        String username = sipAccount.getUsername();
        String password = sipAccount.getPassword();
        String displayName =  sipAccount.getDisplayName();

        Log.d(TAG,"sipAccount: "+sipAccount.toString());


        AudioCodesUA.getInstance().setServerConfig(proxy,port,domain,transport,new ArrayList<PeerConnection.IceServer>());

        AudioCodesUA.getInstance().setAccount(username,password,displayName);

        AudioCodesUA.getInstance().setListener(this);

        updateWebRTCConfig();

    }

    public void updateWebRTCConfig()
    {
        //set dtmf settings
        DTMFOptions.DTMFMethod dtmfMethod = Prefs.getDTMFType();
        DTMFOptions dtmfOptions = new DTMFOptions();
        dtmfOptions.dtmfMethod = dtmfMethod;
        Log.d(TAG,"use dtmfMethod: "+dtmfMethod);
        ACConfiguration.getConfiguration().setDtmfOptions(dtmfOptions);

        Log.d(TAG,"use isAutoRedirect: "+Prefs.isAutoRedirect());
        ACConfiguration.getConfiguration().setAutomaticCallOnRedirect(Prefs.isAutoRedirect());
        RemoteContact remoteContact = new RemoteContact();
        remoteContact.setScheme(null);
        remoteContact.setDisplayName(Prefs.getRedirectCallUser());
        remoteContact.setUserName(Prefs.getRedirectCallUser());
        remoteContact.setDomain(Prefs.getSipAccount().getDomain());

        Log.d(TAG,"use isRedirectCall: "+Prefs.isRedirectCall()+" with RedirectCallUser: "+Prefs.getRedirectCallUser());
        ACConfiguration.getConfiguration().setRedirect(Prefs.isRedirectCall(), remoteContact);
    }


    @Override
    public void loginStateChanged(boolean isLogin, String cause) {
        Log.d(TAG,"loginStateChanged isLogin: "+isLogin+" cause: "+cause);
        Log.d(TAG,"loginStateChanged currentState: "+ isLogin+" prevState: "+registerState);
        if(registerState != isLogin) {
            registerState = isLogin;
            CallBackHandler.loginStateChange(registerState);
            NotificationUtils.createAppNotification();

        }
    }

    public AudioCodesSession getActiveSession()
    {
        AudioCodesSession audioCodesSession=null;
        ArrayList<AudioCodesSession> audioCodesSessionArrayList = AudioCodesUA.getInstance().getSessionList();
        for (AudioCodesSession session: audioCodesSessionArrayList) {
            if (session.getCallState()!=null)
            {
                audioCodesSession = session;
                break;
            }
        }
        //AudioCodesSession audioCodesSession = AudioCodesUA.getInstance().getSession(0);
        //return audioCodesSession;
        return audioCodesSession;
    }

    public ArrayList<AudioCodesSession> getSessionList()
    {
        return AudioCodesUA.getInstance().getSessionList();
    }

    public boolean isAllredyInActiveCall()
    {
        //return getActiveSession()!=null;
        return getActiveSession()!=null && getActiveSession().getCallState()!= CallState.NULL;
//        switch (getActiveSession().getCallState())
//        {
//            case NULL:
//            case CONNECTING:
//            case CALLING:
//            case CONNECTED:
//            case RINGING:
//            case HOLD:
//            case CONFERENCE_CONNECTING:
//            case CONFERENCE_CONNECTED:
//        }
    }

    public void callNumber(String callNumber)
    {
        callNumber(callNumber, false);
    }
    public void callNumber(String callNumber, boolean videoCall)
    {
        try {
            Log.d(TAG, "start callNumber: " +callNumber+ " isVideoCall: "+videoCall);
            RemoteContact contact= new RemoteContact();
            contact.setUserName(callNumber);
            contact.setDisplayName(callNumber);
            AudioCodesSession session = AudioCodesUA.getInstance().call(contact,videoCall, null );
            Intent callIntent = new Intent(MainApp.getGlobalContext(), CallActivity.class);

            session.addSessionEventListener(audioCodesSessionEventListener);

            Log.d(TAG, "callNumber startActivity" );
            callIntent.putExtra(CallActivity.SESSION_ID, session.getSessionID() );
            callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            MainApp.getGlobalContext().startActivity(callIntent);
        } catch (WebRTCException e) {
            Log.d(TAG, "oops: " + e.getMessage());
        }
    }

    @Override
    public void incomingCall(AudioCodesSession call) {
        Log.d(TAG, "Incoming call");
        Log.d(TAG, "Remote user: " + call.getRemoteNumber());
        Intent incomingCallIntent = new Intent(MainApp.getGlobalContext(), IncomingCallActivity.class);
        incomingCallIntent.putExtra(IncomingCallActivity.SESSION_ID, call.getSessionID());
        call.addSessionEventListener(audioCodesSessionEventListener);

        MainApp.getGlobalContext().startActivity(incomingCallIntent);
    }

    public boolean isRegisterState() {
        return registerState;
    }

    AudioCodesSessionEventListener audioCodesSessionEventListener = new AudioCodesSessionEventListener() {
        @Override
        public void callTerminated(AudioCodesSession session) {

            Log.d(TAG, "callTerminated name: "+session.getRemoteNumber().getDisplayName()+" userName: "+session.getRemoteNumber().getUserName());
            //save call to recents
            saveCallHistory(session);
            //save statistics
            ACCallStatistics acCallStatistics = session.getStats();
            Prefs.setCallStats(acCallStatistics);
            Log.d(TAG, "ACCallStatistics: "+acCallStatistics);

            //CallBackHandler.callStateChanged(CallState.NULL);
            //session.getCallState()
                    //MainApp.getDataBase().addEntry(new CallEntry("Avi", 1512997724646L, CallEntry.CallType.NOT_ANSWERED));
        }

        private void saveCallHistory(AudioCodesSession session)
        {
            CallEntry callEntry = new CallEntry();
            callEntry.setContactName(session.getRemoteNumber().getDisplayName());
            callEntry.setContactNumber(session.getRemoteNumber().getUserName());

            long callStartTime = session.getCallStartTime();
            if(callStartTime==0) {
                callStartTime= new Date().getTime();
            }
            callEntry.setStartTime(callStartTime);

            long callDuration = session.duration();
            if(callDuration>0) {
                callDuration = callDuration*1000;//from sec to milisec
            }

            CallEntry.CallType callType = CallEntry.CallType.OUTGOING;
            if(!session.isOutgoing())
            {
                if(callDuration>0) {
                    callType = CallEntry.CallType.INCOMING;
                }
                else
                {
                    callType = CallEntry.CallType.MISSED;
                }
            }
            callEntry.setCallType(callType);

            callEntry.setDuration( callDuration);
            MainApp.getDataBase().addEntry(callEntry);
        }

        @Override
        public void callProgress(AudioCodesSession session) {
            Log.d(TAG, "callProgress name: "+session.getRemoteNumber().getDisplayName()+" userName: "+session.getRemoteNumber().getUserName());
        }

        @Override
        public void cameraSwitched(boolean frontCamera) {
            Log.d(TAG, "cameraSwitched isfrontCamera: "+frontCamera);

        }

        @Override
        public void reinviteWithVideoCallback(AudioCodesSession audioCodesSession) {
            Log.d(TAG, "reinviteWithVideoCallback name: "+audioCodesSession.getRemoteNumber().getDisplayName()+" userName: "+audioCodesSession.getRemoteNumber().getUserName());
            //audioCodesSession.answer(null, true);
        }
    };

}

 

5 yıl 4 ay önce yanıtladın