김중헌 졸업논문 코드 API 6월 3일

Retired DISLab
김중헌 (토론 | 기여) 사용자의 2014년 6월 3일 (화) 12:09 버전
(비교) ← 이전 판 | 현재 판 (비교) | 다음 판 → (비교)
이동: 둘러보기, 찾기
  • ClassDiagram 6.3.jpg


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;
	}
 
}
개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기