김중헌 졸업논문 코드 API 5월 31일
Retired DISLab
사용자 정보를 등록하는 userDataRegistration(), 데이터베이스에서 정보를 가져오는 downloadUserList(), 블루투스를 끄고 키는 turnOn & Off Bluetooth()는 public으로 사용자가 보이도록 제공
UserManager.java
package gae.user.manager; 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.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; import android.view.View; import android.widget.AdapterView; 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; BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); String MACaddr = bluetooth.getAddress(); 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 void addUser(String name, String number, String MACaddr, String regId) { ul.add(new User(name, number, MACaddr, regId)); userCnt++; } public int noOfUsers() { return userCnt; } public boolean isUserEmpty() { return userCnt == 0; } /* thorws Exception OR try/catch 두 방법 중 뭐가 더 나은지 고민중! */ // Receive User Data: return type is strList 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("&"); getUserStringList(split); } } } catch (NullPointerException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } } }).start(); } private String[] getUserStringList(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]); } //getUserStringList(); 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 String[] getUserStringList() { // // 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 boolean checkDuplicationByPhoneNumber(String phoneNumber) { for (User u : ul) { if (u.getNumber().equals(phoneNumber)) return true; } return false; } private List<User> getList() { return ul; } /* getter */ private User getUserFromMACaddr(String addr) { for (User u : ul) { if (u.getMACAddr().equals(addr)) { return u; } else { continue; } } return null; } 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(); } public void userDataRegistration(String name) { getRegId(); 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(); } } private void getRegId() { 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); } public class getListViewItemMACaddr implements AdapterView.OnItemClickListener { ArrayList<String> items = null; public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Bundle extras = new Bundle(); extras.putString("MACaddr", items.get(position)); Log.d("MACsend", items.get(position)); returnMACaddr(items.get(position)); } } private String returnMACaddr(String MACaddr) { return MACaddr; } /* 클릭한 아이템의 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; } }
User.java
package gae.user.manager; public class User { private String name; private String number; private String MACaddr; private String regId; protected User(String name, String number, String MACaddr, String regId) { this.name = name; this.number = number; this.MACaddr = MACaddr; this.regId = regId; } public String getName() { return name; } public String getNumber() { return number; } public String getMACAddr() { return MACaddr; } public String getRegId() { return regId; } @Override public String toString() { return getName() + "/" + getNumber(); } }