">

Android App 정보 가져오기(App icon, package, app 이름)


Android 단말에서 App icon, App 이름, Package 이름 등을 가지고 오려고 하면 다음과 같이 하면 된다. 


[package]

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

final List pkgAppsList = getPackageManager().queryIntentActivities(
mainIntent, 0);
String[] requestedPermissions = null;
String packageName = "";

for (Object obj : pkgAppsList) {
ResolveInfo resolveInfo = (ResolveInfo) obj;
PackageInfo packageInfo = null;
try {
packageInfo = getPackageManager().getPackageInfo(
resolveInfo.activityInfo.packageName,
PackageManager.GET_PERMISSIONS);

requestedPermissions = packageInfo.requestedPermissions;
packageName = packageInfo.packageName;

} catch (PackageManager.NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


[App Title]

String appName = (String) getPackageManager()

.getApplicationLabel(getPackageManager()

.getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES));


[Icon]

appIcon = getPackageManager().getApplicationIcon(packageName);


CLOSE_WAIT



  그림에서 Client가 연결을 종료하기 위해 FIN을 Server로 보낸다. 그리고 FIN에 대한 ACK가 있기 전까지 Server은 CLOSE_WAIT 상태가 된다. 

CLOSE_WAIT 상태가 사라지지 않고 계속 쌓이게 되면 서버에서는 더 이상 서비스 처리를 못하는 상태가 된다. 

CLOSE_WAIT 상태를 해결하는 방법을 시스템의 설정을 바꾸는 방법에 대한 설명이 많았는데 이렇게는 근본적인 원인을 해결할 수 없다. 


  여러 방법들이 있겠지만, 개인적으로 겪은 부분만 정리해 본다. 문제의 원인은 'DefaultHttpClient' 때문이었다. 

사용하는 부분에서 잘못된 것은 없었지만 CLOSE_WAIT 현상이 발생했다. 

그리고 같은 소스로 여러 서버에서 테스트를 진행했을 때 이 현상이 발생하는 곳도 있고, 

어느정도 CLOSE_WAIT가 쌓이다가 없어지는 서버도 있었다. 그래서 변경한 부분은 'DefalutHttpClient'를 '

CloseableHttpClient'로 변경했다. 거짓말처럼 말끔하게 CLOSE_WAIT가 사라졌다. 

DefaultHttpClient를 꼭 사용해야 한다면 아래 참고 자료 중 2번에 해당하는 링크를 참조하면 된다. 

그리고 읽어보면 좋을 것 같아서 추가한 것도 있다. 아래 참고 자료 3번에 해당하는 링크를 참조하면 된다. 

  


문제: CLOSE_WAIT가 쌓이는 현상 발생


해결: DefaultHttpClient -> CloseableHttpClient



참고 자료

[1] http://docs.likejazz.com/close-wait/

[2] http://pchun.tistory.com/60

[3] http://d2.naver.com/helloworld/377316

'프로그래밍 > JAVA' 카테고리의 다른 글

RSA 암호화 및 복호화  (0) 2016.12.26
자바로 크롤링 구현  (0) 2016.09.13
문자열을 나누거나 합치거나  (0) 2016.09.13

네트워크 상태를 확인하고, GPS의 상태를 확인하는 코드


우선 네트워크 상태를 확인하는 코드

boolean isOnline = false;

try {
		ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
			
		State wifi = conMan.getNetworkInfo(1).getState();
		if(wifi == NetworkInfo.State.CONNECTED) {
			isOnline = true;
		}
			
		State mobile = conMan.getNetworkInfo(0).getState();
		if(mobile == NetworkInfo.State.CONNECTED) {
			isOnline = true;
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}


GPS 상태를 확인하는 코드

boolean gpsEnable = false;
LocationManager manager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
if(manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
	gpsEnable = true;
}


+ Recent posts