Advertisement
Guest User

Untitled

a guest
Feb 21st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.61 KB | None | 0 0
  1. package com.gokdemir.areyousafe;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.app.Service;
  5. import android.content.BroadcastReceiver;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.content.IntentFilter;
  9. import android.location.Location;
  10. import android.net.wifi.WpsInfo;
  11. import android.net.wifi.p2p.WifiP2pConfig;
  12. import android.net.wifi.p2p.WifiP2pDevice;
  13. import android.net.wifi.p2p.WifiP2pDeviceList;
  14. import android.net.wifi.p2p.WifiP2pGroup;
  15. import android.net.wifi.p2p.WifiP2pInfo;
  16. import android.net.wifi.p2p.WifiP2pManager;
  17. import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo;
  18. import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest;
  19. import android.os.Handler;
  20. import android.os.IBinder;
  21. import android.os.Message;
  22. import android.support.annotation.Nullable;
  23. import android.util.Log;
  24.  
  25. import com.android.volley.Request;
  26. import com.android.volley.RequestQueue;
  27. import com.android.volley.Response;
  28. import com.android.volley.VolleyError;
  29. import com.android.volley.toolbox.StringRequest;
  30. import com.android.volley.toolbox.Volley;
  31. import com.couchbase.lite.CouchbaseLiteException;
  32. import com.couchbase.lite.Database;
  33. import com.couchbase.lite.Document;
  34. import com.couchbase.lite.Manager;
  35. import com.couchbase.lite.Query;
  36. import com.couchbase.lite.QueryEnumerator;
  37. import com.couchbase.lite.QueryRow;
  38. import com.couchbase.lite.UnsavedRevision;
  39. import com.couchbase.lite.android.AndroidContext;
  40.  
  41. import org.xmlpull.v1.XmlPullParser;
  42. import org.xmlpull.v1.XmlPullParserFactory;
  43.  
  44. import java.io.IOException;
  45. import java.io.InputStream;
  46. import java.io.InputStreamReader;
  47. import java.lang.reflect.Method;
  48. import java.net.Inet4Address;
  49. import java.net.ServerSocket;
  50. import java.net.Socket;
  51. import java.text.SimpleDateFormat;
  52. import java.util.ArrayList;
  53. import java.util.Collection;
  54. import java.util.Date;
  55. import java.util.HashMap;
  56. import java.util.Iterator;
  57. import java.util.List;
  58. import java.util.Map;
  59. import java.util.Set;
  60. import java.util.concurrent.Executors;
  61. import java.util.concurrent.Future;
  62. import java.util.concurrent.ScheduledExecutorService;
  63. import java.util.concurrent.TimeUnit;
  64.  
  65. import static com.gokdemir.areyousafe.BuildConfig.DEBUG;
  66.  
  67. /**
  68. * Created by yatba on 14-Nov-17.
  69. */
  70.  
  71. public class P2PService extends Service{
  72. private String[] TAGS;
  73. // TXT RECORD properties
  74. public List<NearbyDevice> devicesNearby= new ArrayList<>();
  75. AndroidContext androidContext;
  76. LocalDatabaseHandler handler;
  77. public static final String TXTRECORD_PROP_AVAILABLE = "available";
  78. public static final String SERVICE_INSTANCE = "_areyousafe";
  79. public static final String SERVICE_REG_TYPE = "_presence._tcp";
  80. private WifiP2pDnsSdServiceRequest serviceRequest;
  81. private String deviceMacs="";
  82. WifiP2pManager mManager;
  83. WifiP2pManager.Channel mChannel;
  84. BroadcastReceiver mReceiver;
  85. IntentFilter mIntentFilter;
  86.  
  87.  
  88. private ServerSocket mServerSocket;
  89. private Integer mLocalPort;
  90. private Database db;
  91. private boolean isConnected;
  92. private boolean isGroupOwner;
  93. private boolean isGroupCreated;
  94. private static Integer user_num= 0;
  95.  
  96.  
  97. private Future<?> timingTask;
  98. private final ScheduledExecutorService scheduler =
  99. Executors.newSingleThreadScheduledExecutor();
  100.  
  101. public void nearbyDeviceInfo()
  102. {
  103. VolleyHandler handler = new VolleyHandler();
  104. Log.d("Nearby Info",String.valueOf(deviceMacs.equals("")));
  105. handler.setNearbys(deviceMacs);
  106.  
  107. }
  108. public void tick(long milliseconds, final LocalDatabaseHandler handler) {
  109. timingTask = scheduler.scheduleAtFixedRate(new Runnable() {
  110. @SuppressLint("MissingPermission")
  111. public void run() {
  112.  
  113. try {
  114. discoverService();
  115. nearbyDeviceInfo();
  116.  
  117. } catch (Exception e) {
  118. e.printStackTrace();
  119. }
  120. }
  121. },0,milliseconds, TimeUnit.MILLISECONDS);
  122. }
  123.  
  124.  
  125.  
  126. private void discoverService() {
  127. mManager.setDnsSdResponseListeners(mChannel, new WifiP2pManager.DnsSdServiceResponseListener() {
  128. @Override
  129. public void onDnsSdServiceAvailable(String instanceName, String registrationType, WifiP2pDevice wifiP2pDevice) {
  130. obtainNearbyServices(instanceName, registrationType, wifiP2pDevice);
  131. }
  132. }, new WifiP2pManager.DnsSdTxtRecordListener() {
  133. @Override
  134. public void onDnsSdTxtRecordAvailable(String s, Map<String, String> map, WifiP2pDevice wifiP2pDevice) {
  135. }
  136. });
  137. serviceRequest = WifiP2pDnsSdServiceRequest.newInstance();
  138. mManager.addServiceRequest(mChannel, serviceRequest, new WifiP2pManager.ActionListener() {
  139. @Override
  140. public void onSuccess() {
  141. appendStatus("Added service discovery Request");
  142. }
  143.  
  144. @Override
  145. public void onFailure(int i) {
  146. appendStatus("Failed service discovery Request");
  147. }
  148. });
  149. mManager.discoverServices(mChannel, new WifiP2pManager.ActionListener() {
  150. @Override
  151. public void onSuccess() {
  152. appendStatus("Service discovery Succeeded!");
  153. }
  154.  
  155. @Override
  156. public void onFailure(int i) {
  157. appendStatus("Service discovery Failed!");
  158. }
  159. });
  160. }
  161.  
  162. private void obtainNearbyServices(String instanceName, String registrationType, WifiP2pDevice wifiP2pDevice) {
  163. Log.d("Founded device",instanceName +" " +SERVICE_INSTANCE);
  164. if(instanceName.equalsIgnoreCase(SERVICE_INSTANCE))
  165. {
  166.  
  167. NearbyDevice temp = new NearbyDevice(wifiP2pDevice.deviceAddress,new Location(""),
  168. registrationType,wifiP2pDevice.deviceName);
  169. Log.d("Found",temp.getDeviceAddress());
  170. if(!deviceMacs.contains(temp.getDeviceAddress())) {
  171. deviceMacs+=temp.getDeviceAddress() +";";
  172. }
  173. Log.d("Devices nearby",deviceMacs) ;
  174. }
  175. }
  176.  
  177.  
  178. private void startRegistrationAndDiscovery() {
  179. SessionManager temp= new SessionManager(getApplicationContext());
  180. Map record = new HashMap();
  181. record.put(TXTRECORD_PROP_AVAILABLE, "visible");
  182.  
  183. /*
  184. Service information. Pass it an instance name, service type
  185. _protocol._transportlayer , and the map containing
  186. information other devices will want once they connect to this one.
  187. */
  188. WifiP2pDnsSdServiceInfo serviceInfo = WifiP2pDnsSdServiceInfo.newInstance(SERVICE_INSTANCE, SERVICE_REG_TYPE, record);
  189. mManager.addLocalService(mChannel, serviceInfo, new WifiP2pManager.ActionListener() {
  190. @Override
  191. public void onSuccess() {
  192. Log.i(TAGS[7], "Successfully added the service!!");
  193. }
  194.  
  195. @Override
  196. public void onFailure(int i) {
  197. Log.i(TAGS[7], String.valueOf(i));
  198. }
  199. });
  200. discoverService();
  201.  
  202. }
  203. //--------------------------------------------------------------------------------------------------------------------------------
  204. //End
  205. public void appendStatus(String status) {
  206. Log.d("P2P Service",status);
  207. }
  208.  
  209. @Override
  210. public void onCreate()
  211. {
  212. initalizeElements();
  213. registerReceiver(mReceiver,mIntentFilter);
  214.  
  215. //initializeServerSocket();
  216. startRegistrationAndDiscovery();
  217. tick(3*60000,handler);
  218.  
  219.  
  220.  
  221. }
  222.  
  223. private void initalizeElements() {
  224. TAGS =getResources().getStringArray(R.array.p2p_debug_tags);
  225. isConnected = false;
  226. isGroupCreated = false;
  227.  
  228. androidContext = new AndroidContext(getApplicationContext());
  229. handler = new LocalDatabaseHandler(androidContext);
  230.  
  231. mIntentFilter = new IntentFilter();
  232. mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
  233. mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
  234. mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
  235. mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
  236. mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
  237. mChannel = mManager.initialize(this, getMainLooper(), null);
  238. mReceiver = new WiFiDirectBroadcastReceiver(mManager,mChannel,this);
  239. }
  240.  
  241. @Override
  242. public IBinder onBind(Intent intent)
  243. {
  244. return null;
  245. }
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement