< 개발 환경 > |
안드로이드/Android 단말마다 SMS, MMS, CALL 사용 여부 확인 하기~!
안드로이드 프로젝트를 개발하면서, 단말 마다 대응 해줘야 하는 경우가 많은데요. 요즘에는 회사마다 안드로이드 프레임웍을 수정해서 사용 하고 있는 경우가 대부분이라, 안드로이드 기본 기능들을 바뀌거나 사용 할 수 없게 되는 경우가 많이 발생 합니다.
예를 들자면, 삼성 갤럭시 탭 10.1 인치 같은 경우는 SMS, MMS, CALL 기능을 사용 할 수 없는 버젼 이기 때문에, 기존에 SMS나 MMS, CALL 기능을 사용 했던 코드들을 그대로 사용 할 경우, 단말이 무한 루프에 빠져 죽는 경우가 발생 하게 됩니다.
그렇기 때문에 SMS, MMS, CALL 기능을 사용 하기 전에 실제 단말에서 이 3가지 기능에 대해 제공 하고 있는지 여부를 판단하는 것이 중요 합니다. 이 기능들을 판단 하기 위해서는 PackageManager 의 queryIntentActivities 를 사용 해야 하는데요.
queryIntentActivities 는 인자로 받은 intent의 action 값을 가지고 실제 사용 할 수 있는 Activity 목록을 반환해주는 메서드 입니다. 그렇기 때문에 먼저 SMS, MMS, CALL 기능의 Activity 가 정의 되 있는 단말에서만 해당 목록을 얻어 올 수 있습니다.
우리가 사용하는 SMS, MMS, CALL 기능은 모두 각각의 Activity들이 제공 하는 기능 입니다.
자 그렇다면, 실제로 코드에서 확인 하는 방법을 알아 보겠습니다.~!!
/** * SMS */ public static boolean aviliableSMS(Context context) { PackageManager pac = context.getPackageManager(); Uri smsUri = Uri.parse("sms:"); Intent smsIntent = new Intent(Intent.ACTION_SENDTO, smsUri); Listlist = pac.queryIntentActivities (smsIntent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); ArrayList tempList = new ArrayList (); int count = list.size(); String packageName = ""; for(int i = 0; i < count; i++) { ResolveInfo firstInfo = list.get(i); packageName = firstInfo.activityInfo.applicationInfo.packageName; tempList.add(list.get(i).activityInfo); Log.d("packageName", "packageName = " + packageName); } if(packageName == null || packageName.equals("")){ return false; }else{ return true; } } /** * MMS */ public static boolean aviliableMMS(Context context) { PackageManager pac = context.getPackageManager(); Uri mmsUri = Uri.parse("mmsto:"); Intent mmsIntent = new Intent(Intent.ACTION_VIEW, mmsUri); List list = pac.queryIntentActivities (mmsIntent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); ArrayList tempList = new ArrayList (); int count = list.size(); String packageName = ""; for(int i = 0; i < count; i++) { ResolveInfo firstInfo = list.get(i); packageName = firstInfo.activityInfo.applicationInfo.packageName; tempList.add(list.get(i).activityInfo); Log.d("packageName", "packageName = " + packageName); } if(packageName == null || packageName.equals("")){ return false; }else{ return true; } } /** * CALL */ public static boolean aviliableCALL(Context context) { PackageManager pac = context.getPackageManager(); Uri callUri = Uri.parse("tel:"); Intent callIntent = new Intent(Intent.ACTION_CALL, callUri); List list = pac.queryIntentActivities (callIntent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); ArrayList tempList = new ArrayList (); int count = list.size(); String packageName = ""; for(int i = 0; i < count; i++) { ResolveInfo firstInfo = list.get(i); packageName = firstInfo.activityInfo.applicationInfo.packageName; tempList.add(list.get(i).activityInfo); Log.d("packageName", "packageName = " + packageName); } if(packageName == null || packageName.equals("")){ return false; }else{ return true; } } //
/** * SMS 실제 사용 코드 입니다. */ if(CommonUtil.aviliableSMS(getApplicationContext())){ uri = Uri.parse("sms:" + "01000000000"); intent = new Intent(Intent.ACTION_SENDTO, uri); startActivity(intent); }else{ Toast.makeText(getApplicationContext(), "SMS 서비스를 이용할 수 없는 단말 입니다.", Toast.LENGTH_SHORT).show(); } /** * MMS 실제 사용 코드 입니다. */ if(CommonUtil.aviliableMMS(getApplicationContext())){ Uri uri = Uri.parse("" + attached_uri); Intent it = new Intent(Intent.ACTION_SEND); it.putExtra("sms_body", "some text"); it.putExtra(Intent.EXTRA_STREAM, uri); it.setType("image/*"); // 삼성 단말에서만 허용 ( 앱 선택 박스 없이 호출 ) // it.setComponent(new ComponentName("com.sec.mms", "com.sec.mms.Mms")); startActivity(it); }else{ Toast.makeText(getApplicationContext(), "MMS 서비스를 이용할 수 없는 단말 입니다.", Toast.LENGTH_SHORT).show(); } /** * CALL 실제 사용 코드 입니다. */ if(CommonUtil.aviliableCALL(getApplicationContext())){ uri = Uri.parse("tel:" + "01000000000"); intent = new Intent(Intent.ACTION_CALL, uri); startActivity(intent); }else{ Toast.makeText(getApplicationContext(), "전화 서비스를 이용할 수 없는 단말 입니다.", Toast.LENGTH_SHORT).show(); }
'Android > Intent' 카테고리의 다른 글
안드로이드/Android intent(인텐트)를 사용해 보자. (intent filter) (17) | 2012.05.20 |
---|---|
안드로이드/Android 안드로이드 Intent 그리고 PendingIntent 와 Intent Sender (4) | 2012.03.12 |
안드로이드/Android Intent로 Video 재생 프로그램 선택 하기 (3) | 2012.02.23 |
안드로이드/Android Intent로 데이터 주고 받기 (0) | 2012.02.03 |
안드로이드/Android Intent 활용 예시 (0) | 2012.02.03 |