Kişisel Sayfaları
İlgi Alanları
İş Tecrubesi
Eğitim Geçmişi
Sertifikalar & Başarılar
Kullanıcıya ait test sonucu bulunmamaktadır.
Dil Becerileri
Son Forum Aktiviteleri
1AndroidRuntime: 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);
}
};
}