김중헌 졸업논문 코드 API 6월 3일
Retired DISLab
UserManager.java
package hufs.dislab.gae.userManager; import java.io.IOException; import java.util.ArrayList; import java.util.EventObject; import java.util.LinkedList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.AsyncTask; import android.telephony.TelephonyManager; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Toast; import com.google.android.gms.gcm.GoogleCloudMessaging; public class UserManager { EventObject event = null; private static UserManager um; private List<User> ul; public Context context; private int userCnt = 0; String REGI_ID = ""; String SENDER_ID = "508815197180"; private BluetoothAdapter myBluetoothAdapter; public String selectedMacAddr = ""; BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); String MACaddr = bluetooth.getAddress(); private ArrayAdapter<String> BTArrayAdapter; private ArrayList<String> items = null; { // take an instance of BluetoothAdapter - Bluetooth radio myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); items = new ArrayList<String>(); } private UserManager(Context context) { ul = new LinkedList<User>(); this.context = context; } public static UserManager getUserManager(Context context) { if (um == null) { um = new UserManager(context); } return um; } private synchronized void addUser(String name, String number, String MACaddr, String regId) { ul.add(new User(name, number, MACaddr, regId)); userCnt++; } public int numberOfUsers() { return userCnt; } public boolean isUserEmpty() { return userCnt == 0; } /** * 사용자 정보를 userList에 넣어주는 연산을 처리한다. */ public synchronized void getUserList() { new Thread(new Runnable() { @Override public void run() { try { HttpClient client = new DefaultHttpClient(); String getURL = "http://hunny123234.appspot.com"; HttpGet get = new HttpGet(getURL); HttpResponse responseGet = client.execute(get); HttpEntity resEntityGet = responseGet.getEntity(); if (resEntityGet != null) { // process result String temp = EntityUtils.toString(resEntityGet); String temp1 = temp; for (String line : temp1.split("\n")) { String[] split = line.split("&"); setUserStringList(split); } } } catch (NullPointerException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } } }).start(); } private synchronized void setUserStringList(String[] split) { for (int i = 0; i < split.length - 3; i += 4) { if (!UserManager.getUserManager(null).checkDuplicationByPhoneNumber(split[i + 1])) UserManager.getUserManager(null).addUser(split[i], split[i + 1], split[i + 2], split[i + 3]); } //setUserStringList(); List<User> ul = UserManager.getUserManager(null).getList(); String[] strList = new String[ul.size()]; int i = 0; for (User u : ul) { strList[i] = u.toString(); i++; } } // private String[] setUserStringList() { // // List<User> ul = UserManager.getUserManager(null).getList(); // String[] strList = new String[ul.size()]; // int i = 0; // for (User u : ul) { // strList[i] = u.toString(); // i++; // } // return strList; // } private synchronized boolean checkDuplicationByPhoneNumber(String phoneNumber) { for (User u : ul) { if (u.getNumber().equals(phoneNumber)) return true; } return false; } /** * userList를 반환한다. ul라는 자원을 동시에 접근하지 못하도록 관련된 함수들은 모두 synchronized로 선언 * @return */ public synchronized List<User> getList() { return ul; } /** * 블루투스 전원 키기 */ public void turnOnBluetooth() { if (!myBluetoothAdapter.isEnabled()) { myBluetoothAdapter.enable(); Toast.makeText(UserManager.getUserManager(null).context.getApplicationContext(), "Bluetooth turned on", Toast.LENGTH_LONG).show(); } else { Toast.makeText(UserManager.getUserManager(null).context.getApplicationContext(), "Bluetooth is already on", Toast.LENGTH_LONG).show(); } } /** * 블루투스 전원 끄기 */ public void turnOffBluetooth() { myBluetoothAdapter.disable(); Toast.makeText(UserManager.getUserManager(null).context.getApplicationContext(), "Bluetooth turned off", Toast.LENGTH_LONG).show(); } /** * 사용자의 정보를 등록하는 함수 * 이름은 변수이기 때문에 인자 값으로 넣어서 휴대폰 번호, MAC주소, regId와 함께 앱 엔진에 post 방식으로 보낸다 * @param name */ public void registerUserData(final String name) { issueRegId(); new Thread(new Runnable() { @Override public void run() { String url = "http://hunny123234.appspot.com/sign"; HttpClient http = new DefaultHttpClient(); TelephonyManager phoneMgr = (TelephonyManager) UserManager .getUserManager(null).context.getApplicationContext() .getSystemService(Context.TELEPHONY_SERVICE); String number = phoneMgr.getLine1Number(); BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); String MACaddr = bluetooth.getAddress(); try { ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("name", name)); nameValuePairs.add(new BasicNameValuePair("regId", REGI_ID)); nameValuePairs.add(new BasicNameValuePair("number", number)); nameValuePairs.add(new BasicNameValuePair("MACaddr", MACaddr)); HttpPost httpPost = new HttpPost(url); UrlEncodedFormEntity entityRequest = new UrlEncodedFormEntity( nameValuePairs, "UTF-8"); httpPost.setEntity(entityRequest); http.execute(httpPost); } catch (Exception e) { e.printStackTrace(); } } }).start(); } private void issueRegId() { new AsyncTask<Void, String, String>() { @Override protected String doInBackground(Void... params) { GoogleCloudMessaging gcm = GoogleCloudMessaging .getInstance(UserManager.getUserManager(null).context .getApplicationContext()); try { REGI_ID = gcm.register(SENDER_ID); Log.d("REGISTRATION", REGI_ID); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.e("REGISTRATION", e.toString()); } gcm.close(); return null; } }.execute(null, null, null); } /** * 리스트뷰에서 아이템을 클릭했을 때 해당 아이템의 MAC주소를 반환하는 onItemClick 이벤트 처리 예시이다. * 이를 활용하면 변수 selectedMacAddr에 선택한 Item의 MAC주소가 반환된다. * @author KimJungheon * */ public class getListViewItemMACaddr implements AdapterView.OnItemClickListener { ArrayList<String> items = null; public void onItemClick(AdapterView<?> parent, View view, int position, long id) { selectedMacAddr = items.get(position); } } /** * ListView가 있는 액티비티 */ public void detectUsers() { if (myBluetoothAdapter.isDiscovering()) { // the button is pressed when it discovers, so cancel the discovery myBluetoothAdapter.cancelDiscovery(); } else { BTArrayAdapter.clear(); myBluetoothAdapter.startDiscovery(); UserManager.getUserManager(null).context.registerReceiver(bReceiver, new IntentFilter( BluetoothDevice.ACTION_FOUND)); } } final BroadcastReceiver bReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); // When discovery finds a device if (BluetoothDevice.ACTION_FOUND.equals(action)) { // Get the BluetoothDevice object from the Intent BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // add the name and the MAC address of the object to the // arrayAdapter BTArrayAdapter.add(device.getName() + "\n" + device.getAddress()); items.add(device.getAddress()); BTArrayAdapter.notifyDataSetChanged(); } } }; /** * * @param MACaddr * @return 클릭한 아이템의 mac주소를 가지고 있는지 확인 후 있다면 (이름/휴대폰번호) 리스트뷰에 띄워줌. 없다면 토스트 메시지 출력 */ public String[] getSelectedUserStringList(String MACaddr) { // Intent intent = getIntent(); // String mac = intent.getStringExtra("MACaddr"); User selectedUser = UserManager.getUserManager(null).getUserFromMACaddr(MACaddr); //if there is user having MACaddr if (selectedUser != null) { String[] selectedUserList = new String[1]; for (int i = 0; i < selectedUserList.length; i++) { selectedUserList[i] = selectedUser.toString(); } return selectedUserList; //there is no user having MACaddr } else { Toast.makeText(UserManager.getUserManager(null).context, "No device in Datastore", Toast.LENGTH_SHORT).show(); } return null; } private synchronized User getUserFromMACaddr(String addr) { for (User u : ul) { if (u.getMACAddr().equals(addr)) { return u; } else { continue; } } return null; } }