/** * Shares a geolocation with a contact. An exception if thrown if there is no ongoing CS call. The * parameter contact supports the following formats: MSISDN in national or international format, * SIP address, SIP-URI or Tel-URI. If the format of the contact is not supported an exception is * thrown. * * @param contact Contact * @param geoloc Geolocation info * @param listener Geoloc sharing event listener * @return Geoloc sharing * @throws ServerApiException */ public IGeolocSharing shareGeoloc(String contact, Geoloc geoloc, IGeolocSharingListener listener) throws ServerApiException { if (logger.isActivated()) { logger.info("Initiate a geoloc sharing session with " + contact); } // Test IMS connection ServerApiUtils.testIms(); try { // Create a geoloc content String msgId = ChatUtils.generateMessageId(); GeolocPush geolocPush = new GeolocPush( geoloc.getLabel(), geoloc.getLatitude(), geoloc.getLongitude(), geoloc.getExpiration(), geoloc.getAccuracy()); String geolocDoc = ChatUtils.buildGeolocDocument( geolocPush, ImsModule.IMS_USER_PROFILE.getPublicUri(), msgId); MmContent content = new GeolocContent("geoloc.xml", geolocDoc.getBytes().length, geolocDoc.getBytes()); // Initiate a sharing session final GeolocTransferSession session = Core.getInstance() .getRichcallService() .initiateGeolocSharingSession(contact, content, geolocPush); // Add session listener GeolocSharingImpl sessionApi = new GeolocSharingImpl(session); sessionApi.addEventListener(listener); // Start the session Thread t = new Thread() { public void run() { session.startSession(); } }; t.start(); // Add session in the list addGeolocSharingSession(sessionApi); return sessionApi; } catch (Exception e) { if (logger.isActivated()) { logger.error("Unexpected error", e); } throw new ServerApiException(e.getMessage()); } }
/** * Add an geoloc sharing session in the list * * @param session Geoloc sharing session */ protected static void addGeolocSharingSession(GeolocSharingImpl session) { if (logger.isActivated()) { logger.debug("Add a geoloc sharing session in the list (size=" + gshSessions.size() + ")"); } gshSessions.put(session.getSharingId(), session); }