< 개발 환경 > |
안드로이드/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);
List list = 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 |