광고 sdk를 만들면서 블루스택 윈드로이 지니모션과 같은 에뮬레이터를 필터링해달라는 요청이 있습니다.
윈드로이와 지니모션같은 경우 Build.BRAND나 Build.MODEL, Build.PRODUCT 등과 같은 정보로 확인이 가능했습니다.
TextView tv = (TextView) findViewById(R.id.textView1);
String info = "";
TelephonyManager telManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String networkinfo = telManager.getNetworkOperatorName();
info+="BOARD ="+Build.BOARD+"\n";
info+="BRAND ="+Build.BRAND+"\n";
info+="DEVICE ="+Build.DEVICE+"\n";
info+="FINGERPRINT ="+Build.FINGERPRINT.startsWith("generic")+"\n";
info+="DISPLAY ="+Build.DISPLAY+"\n";
info+="MANUFACTURER ="+Build.MANUFACTURER+"\n";
info+="MODEL ="+Build.MODEL+"\n";
info+="PRODUCT ="+Build.PRODUCT+"\n";
info+="networkinfo ="+networkinfo+"\n";
SensorManager manager = (SensorManager) getSystemService(SENSOR_SERVICE);
if (manager.getSensorList(Sensor.TYPE_ALL).isEmpty()) {
// running on an emulator
info+="running on an emulator!!";
} else {
// running on a device
info+="running on an device!!";
}
위 소스로 각 에뮬로 실행한 결과
[ 블루스택 ]
[ 윈드로이 ]
[ 지니모션 ]
문제는 블루스택... 따라서 블루스택을 확인하기위해 각 시스템에 돌고있는 서비스를 체크하기로하였습니다.
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> list = am.getRunningAppProcesses();
List<RunningServiceInfo> listservice = am.getRunningServices(Integer.MAX_VALUE);
for(int i = 0; i < listservice.size(); i++) {
//실행중인 서비스 이름(패키지명)
info+=(listservice.get(i).process)+"\n";
}
info+="======================================\n";
for(int i = 0; i < list.size(); i++) {
//실행중인 프로세스 이름(패키지명)
info+=(list.get(i).processName+"\n");
}
결국 블루스택의 경우 서비스체크 윈드로이나 지니모션은 MANUFACTURER 를 체크하면 될듯합니다
오늘도 화이팅
'Android' 카테고리의 다른 글
안드로이드(android) 핸들러(Handler) 개념 & 예제 (0) | 2016.05.26 |
---|---|
안드로이드(android) 쓰레드(Thread) 개념 예제 (1) | 2016.05.19 |
Android Manifest의 launchMode (1) | 2016.05.19 |
서버와 로컬 파일 사이즈 비교하기 (0) | 2015.11.13 |
android XmlPullParser, 안드로이드 xml 파싱 (0) | 2015.02.13 |