Search Results
Search Results for 'Intent' : 2 POSTS
- 2011.01.14 Intent 존재여부 확인하기
- 2010.08.15 인텐트란? (Intent)
Intent 존재여부 확인하기
- Posted at 2011. 1. 14. 15:41
- Posted by 루지메이앙
- Filed under 안드로이드/펌글
');
}
//-->
|
');
}
//-->
|
느슨하게 결합되어 있는 API를 사용하는 것이 좋은 반면 사용자가 보내는 Intent가 다른 Application에 의해 받아지는 것에 대한 확신은 가질 수 없다. 이러한 현상은 Panoramio(위치정보를 제공하는 App)와 그것의 RADRA Intent와 같이 3rd-party Apps에서 특히 일어난다.
이번 Article은 여러분이 사용하고 싶어하는 Intent를 처리할 수 있는 어떤 Application을 시스템이 포함하고 있는지를 알아볼 수 있는 Technique을 기술하게 된다. 아래의 예제는 시스템 Package Manager에게 어떤 App이 특정 Intent에 응답할 수 있는지의 여부를 결정하도록 요청하는 Helper Method를 보여준다. 여러분의 응용프로그램은 해당 Method로 Intent를 보낼 수 있고, 예를 들자면 그런 다음에 해당 Intent를 보낼 수 있는 사용자 Options을 숨기거나 보여줄 수 있다.
/**
* Indicates whether the specified action can be used as an intent. This
* method queries the package manager for installed packages that can
* respond to an intent with the specified action. If no suitable package is
* found, this method returns false.
*
* @param context The application's environment.
* @param action The Intent action to check for availability.
*
* @return True if an Intent with the specified action can be sent and
* responded to, false otherwise.
*/
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
* Indicates whether the specified action can be used as an intent. This
* method queries the package manager for installed packages that can
* respond to an intent with the specified action. If no suitable package is
* found, this method returns false.
*
* @param context The application's environment.
* @param action The Intent action to check for availability.
*
* @return True if an Intent with the specified action can be sent and
* responded to, false otherwise.
*/
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
다음에는 그러한 Helper Method를 어떻게 사용할 수 있는지를 보여준다.
@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {
final boolean scanAvailable = isIntentAvailable(this, "com.google.zxing.client.android.SCAN");
MenuItem item;
item = menu.findItem(R.id.menu_item_add);
item.setEnabled(scanAvailable);
return super.onPrepareOptionsMenu(menu);
}
final boolean scanAvailable = isIntentAvailable(this, "com.google.zxing.client.android.SCAN");
MenuItem item;
item = menu.findItem(R.id.menu_item_add);
item.setEnabled(scanAvailable);
return super.onPrepareOptionsMenu(menu);
}
이러한 예제에서, Barcode Scanner Application이 설치되어 있지 않다면 Menu는 비활성화 처리된다.
좀더 간단하게 startActivity()를 호출했을 때 ActivityNotFoundException을 캐치하도록 하는 또다른 방법이 있지만 그러한 문제발생에 반응만 할 수 있다. 즉, 여러분은 그러한 것을 예측할 수 없고 동작하지 않기를 바라는 무언가를 차단하는 것에 따라 UI를 업데이트할 수 없다는 것이다. 또한 여기에 기술된 방법은 설치 되지않은 패키지를 설치하고자 하는지를 사용자에게 Startup time시에 묻는데 사용될 수 있다. 그런 다음, 적당한 URI를 사용하여 사용자를 Android Market으로 간단하게 안내할 수 있게 된다.
- Tag
- Intent, isIntentAvailable
- RSS :
- Response
- 1 Trackbacks 0 Comments
인텐트란? (Intent)
- Posted at 2010. 8. 15. 04:06
- Posted by 루지메이앙
- Filed under 안드로이드/이론정리
');
}
//-->
|
');
}
//-->
|
안드로이드 인텐트란? (Android Intent)
- 안드로이드 시스템에서 커뮤니케이션을 담당하는 역할로 컴포넌트간의 호출과 메시지 전달에 이용한다
- 런처에 나타나지 않는(루트 액티비티가 아닌) 액티비티를 실행시킬 때 사용한다
- Activity, Service, Broadcast Receiver 컴포넌트를 활성화 시킬 수 있다
- startActivity(), startActivityForResult()에 포함되어 Activity를 호출하며, 호출된 액티비티는 getIntent()를
이용해 메시지를 전달받고, 이후 전달받은 메시지는 onNewIntent()를 override하여 전달받을 수 있다
- startActivityForResult()를 이용해 호출된 액티비티는 인텐트에 반환값을 넣어 다시 자신을 호출한
액티비티에게 되돌려 줄 수 있으며 이때에는 setResult()에 인텐트를 포함시켜 반환한다
- startService(), bindService()에 포함되어 Service를 호출하며, 호출된 서비스는 onStart(), onBind()를
override하여 메시지를 전달받을 수 있다
- sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcase()등에 포함되어 Broadcast를 호출하며
호출된 브로드캐스트는 onReceive()를 override하여 메시지를 전달받을 수 있다
- 이외에도 PendingIntent 라는 권한을 위임하는 인텐트가 있다
- 메시지를 전달할때 putExtra()를 사용하며 전달받을때에는 getExtras().get변수타입() 또는
get변수타입Extra()을 사용한다
- 안드로이드 시스템에서 커뮤니케이션을 담당하는 역할로 컴포넌트간의 호출과 메시지 전달에 이용한다
- 런처에 나타나지 않는(루트 액티비티가 아닌) 액티비티를 실행시킬 때 사용한다
- Activity, Service, Broadcast Receiver 컴포넌트를 활성화 시킬 수 있다
- startActivity(), startActivityForResult()에 포함되어 Activity를 호출하며, 호출된 액티비티는 getIntent()를
이용해 메시지를 전달받고, 이후 전달받은 메시지는 onNewIntent()를 override하여 전달받을 수 있다
- startActivityForResult()를 이용해 호출된 액티비티는 인텐트에 반환값을 넣어 다시 자신을 호출한
액티비티에게 되돌려 줄 수 있으며 이때에는 setResult()에 인텐트를 포함시켜 반환한다
- startService(), bindService()에 포함되어 Service를 호출하며, 호출된 서비스는 onStart(), onBind()를
override하여 메시지를 전달받을 수 있다
- sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcase()등에 포함되어 Broadcast를 호출하며
호출된 브로드캐스트는 onReceive()를 override하여 메시지를 전달받을 수 있다
- 이외에도 PendingIntent 라는 권한을 위임하는 인텐트가 있다
- 메시지를 전달할때 putExtra()를 사용하며 전달받을때에는 getExtras().get변수타입() 또는
get변수타입Extra()을 사용한다
ACTION_SEND를 이용한 암시적 인텐트 적용시 나오는 Chooser
명시적 인텐트와 암시적(묵시적) 인텐트 (Explicit intent & intent)
- 인텐트를 사용할때에는 명시적으로 하나의 컴포넌트를 선택하여 메시지를 전달하는 방법과
암시적으로 여러 컴포넌트중 지정한 특성을 가진 컴포넌트중 하나를 선택하여 사용하는 방법이 있다
- 암시적 인텐트는 명시적으로 알지 못하는 컴포넌트 중 자신이 활용 가능한 컴포넌트를 다른
어플리케이션으로부터 불러서 사용할 수 있게 해주어 여러 어플리케이션의 컴포넌트를 활용가능하게 한다
이로인해 어플리케이션의 경계없이 서로다른 어플리케이션을 하나처럼 사용 가능하게 해준다
- 명시적 인텐트는 실행할 컴포넌트의 클래스명을 지정하여 활성화 시킨다
- 암시적 인텐트는 Action, Category, Data를 사용해 인텐트 필터에(intent filter) 걸러내고 남는
컴포넌트를 찾아(인텐트해석:intent resolving) 이중 한가지를 createChooser()로 선택하여 실행시킨다
- 인텐트 필터는 하나뿐이 아닌 여러개를 지정하여 일치하는 필터가 있을경우 통과할 수 있다
- Action은 AndroidManifest에 정의해놓은 각각의 컴포넌트가 처리할 행동을(Action) 참조하여 사용자가
지정한 Action과 일치하는 컴포넌트를 찾아내며 지정된 Action이 없을경우 일치한 것으로 간주한다
- Category는 AndroidManifest에 정의해놓은 각각의 컴포넌트 분류를(Category) 참조하여 사용자가
지정한 Category와 일치하는 컴포넌트는 찾아내며 지정된 Category가 없을경우 Category가 지정되지
않은 컴포넌트만 일치한 것으로 간주한다
- Data는 AndroidManifest에 정의해놓은 각각의 컴포넌트 URI를 참조하여 사용자가 지정한 type 또는
schema등 과 일치하는 컴포넌트는 찾아낸다
- 인텐트를 이용한 브라우저에 웹페이지 띄우기 예제
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Intent-Filter 값
http://developer.android.com/guide/topics/intents/intents-filters.html#iobjs
- 인텐트를 사용할때에는 명시적으로 하나의 컴포넌트를 선택하여 메시지를 전달하는 방법과
암시적으로 여러 컴포넌트중 지정한 특성을 가진 컴포넌트중 하나를 선택하여 사용하는 방법이 있다
- 암시적 인텐트는 명시적으로 알지 못하는 컴포넌트 중 자신이 활용 가능한 컴포넌트를 다른
어플리케이션으로부터 불러서 사용할 수 있게 해주어 여러 어플리케이션의 컴포넌트를 활용가능하게 한다
이로인해 어플리케이션의 경계없이 서로다른 어플리케이션을 하나처럼 사용 가능하게 해준다
- 명시적 인텐트는 실행할 컴포넌트의 클래스명을 지정하여 활성화 시킨다
- 암시적 인텐트는 Action, Category, Data를 사용해 인텐트 필터에(intent filter) 걸러내고 남는
컴포넌트를 찾아(인텐트해석:intent resolving) 이중 한가지를 createChooser()로 선택하여 실행시킨다
- 인텐트 필터는 하나뿐이 아닌 여러개를 지정하여 일치하는 필터가 있을경우 통과할 수 있다
- Action은 AndroidManifest에 정의해놓은 각각의 컴포넌트가 처리할 행동을(Action) 참조하여 사용자가
지정한 Action과 일치하는 컴포넌트를 찾아내며 지정된 Action이 없을경우 일치한 것으로 간주한다
- Category는 AndroidManifest에 정의해놓은 각각의 컴포넌트 분류를(Category) 참조하여 사용자가
지정한 Category와 일치하는 컴포넌트는 찾아내며 지정된 Category가 없을경우 Category가 지정되지
않은 컴포넌트만 일치한 것으로 간주한다
- Data는 AndroidManifest에 정의해놓은 각각의 컴포넌트 URI를 참조하여 사용자가 지정한 type 또는
schema등 과 일치하는 컴포넌트는 찾아낸다
- 인텐트를 이용한 브라우저에 웹페이지 띄우기 예제
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Intent-Filter 값
Intent 클래스의 정의 | AndroidManifest 일치값 | 설명 |
ACTION_MAIN | android.intent.action.MAIN | 시작(루트) 액티비티 |
ACTION_VIEW | android.intent.action.VIEW | 해당 자원을 보여주는 액션 |
ACTION_CALL | android.intent.action.CALL | 전화를 거는 액션 |
ACTION_DIAL | android.intent.action.DIAL | 전화 다이얼이 나오는 액션 |
ACTION_SEND | android.intent.action.SEND | 문자,메일등 데이터를 보내는 액션 |
ACTION_SCREEN_ON | android.intent.action.SCREEN_ON | 화면이 켜지는 액션 |
ACTION_BATTERY_LOW | android.intent.action.BATTERY_LOW | 배터리 부족 액션 |
Intent 클래스의 정의 | AndroidManifest 일치값 | 설명 |
CATEGORY_DEFAULT | android.intent.category.DEFAULT | 기본 카테고리 |
CATEGORY_LAUNCHER | android.intent.category.LAUNCHER | 어플리케이션 런쳐로 실행되는 분류 |
CATEGORY_HOME | android.intent.category.HOME | 홈스크린에 표시되는 액티비티 |
CATEGORY_BROWSABLE | android.intent.category.BROWSABLE | 인터넷 브라우저 사용분류 |
http://developer.android.com/guide/topics/intents/intents-filters.html#iobjs
- Tag
- Action, Category, data, explicit, implicit, Intent, intent chooser, intent filter, PendingIntent, 데이타, 명시적, 암시적, 액션, 인텐트, 인텐트필터, 전달, 카테고리
- RSS :
- Response
- 0 Trackbacks 0 Comments