반응형

인텐트를 받을 앱이 있는지 확인하기(Verify There is an App to Receive the Intent)

-------------------------------------------------------------------

비록 안드로이드 플랫폼이 여러분의 인텐트에 대해 내장된 앱(전화걸기, 이메일, 또는 달력 앱 등)중에서 하나가 확실하게 사용할 수 있다는 것을 보증하더라도, 여러분은 항상 인텐트를 발동하기 전에 인텐트에 대응하는 앱이 있는지 확인 단계를 포함하시는 것이 좋습니다.


Caution : 만약 인텐트가 발동 되었는데 디바이스(device)에 인텐트를 처리할 수 있는 앱이 없다면 여러분의 앱은 충돌을 일으킵니다.


 인텐트에 반응할 수 있는 액티비티가 있는지 확인하기 위해서 여러분은 queryIntentActivities() 메소드를 호출하여 그 Intent 를 처리하는 능력을 가진 액티비티들의 리스트(list)를 얻을 수 있습니다. 만약 이 메소드로부터 리턴된 List 인스턴스가 비어있지 않다면, 여러분은 안전하게 인텐트를 사용할 수 있습니다. 예:

 PackageManager packageManager = getPackageManager();

 List activities = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

 boolean isIntentSafe = activities.size() > 0;


 만약 isIntentSafe 변수의 값이 true 면, 인텐트에 응답할 앱이 최소한 1개 이상이라는 것입니다. 만약 이 값이 false 라면, 그 인텐트를 처리할 어떤 앱도 없다는 것입니다.


Note :  사용자가 인텐트를 사용려고 하기 전에 이를 사용하는 기능을 해제 해야할 필요가 있는 경우에는 여러분의 액티비티가 처음 시작될 때 이 체크를 수행 해야 합니다. 만약 여러분이 인텐트를 처리할 특정 앱을 알고 있다면, 여러분은 또한 앱을 다운로드 하기 위한 사용자에 대해 링크(link)를 제공할 수 있습니다.( 개발자 사이트의 "link to your product on Google Play" 의 방법을 참고하세요)




Intent 로 Activity 실행하기 (Start an Activity with the Intent)

------------------------------------------------

 여러분이 Intent 를 만들고 extra 정보를 설정했다면, startActivity() 메소들 호출해서 시스템에게 인텐트를 전송합니다. 만약 시스템이 그 인텐트를 처리 할 수 있는 액티비티들이 하나 이상으로 식별한다면, 그림 1에 보여진 것 처럼 사용자에게 어떤 앱을 사용할 것이지 선택하도록 하기위한 다이얼로그(dialog)를 표시합니다. 만약 인텐트를 처리할 수 있는 액티비티가 오직 하나라면 시스템은 즉시 그 앱을 실행합니다.

  startActivity(intent);



그림 1. 인텐트를 처리할 수 있는 앱이 하나 이상일때 나타나는 선택 다이얼로그의 예.



 아래는 지도보기를 위한 인텐트를 만드는 방법과 그 인텐트를 처리할 수 있는 앱이 존재하는지 확인하고 난후에 그 앱을 실행하는 완성된 예제입니다.

 // Build the intent

 Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");

 Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);


 // Verify it resolves

 PackageManager packageManager = getPackageManager();

 List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);

 boolean isIntentSafe = activities.size() > 0;


 // Start an activity if it's safe

 if (isIntentSafe) {

     startActivity(mapIntent);

 }




Chooser 앱 보여주기 (Show an App Chooser)

-------------------------------------

  위에서 설명했듯이 여러분이 startActivity()에 Intent를 전달해서 하나의 액티비티를 시작할 때 그 인텐트에 응답하는 앱이 하나 이상이면 어떤 앱을 사용할 지 선택하도록 하는데 이 때 여러분은 기본으로 실행될 앱을 선택할 수 있습니다.( 그림 1의 다이얼로그에서 아래 바닥에 있는 체크박스(checkbox)를 선택함으로서). 이 것은 웹 페이지(web page)를 열 때(사용자가 가능한 하나의 웹브라우져(web browser)를 사용한다고 가정하고) 또는 사진 촬영(사용자가 하나의 카메라를 선호한다고 가정하고)과 같이 , 하나의 액션을 수행할 때 사용자가 일반적으로 매 순간 같은 앱을 사용하도록 한다면 매우 좋은 방법입니다.


어쨋든, 만약 수행되어지는 action이 여러 앱들에서 처리되어지고 사용자가 매 순간 다른 앱을 선호할 수 도 있다면( 사용자가 하나의 아이템을 여러 앱들을 통해 공유할 수도 있는 "공유(share)" action 같은) 여러분은 그림 2에서 보여진 Chooser 다이얼로그(Chooser Dialog)를 명시적(explicit)으로 보이도록 하는 것이 좋습니다. Chooser Dialog는 사용자가 매 순간 action에 대해 어떤 앱을 사용할 지 선택할 수 있도록 합니다. (이 다이얼로그는 사용자가 action에 대한 기본 앱을 선택할 수 없습니다.)



 















그림 2. A Chooser Dialog



 Chooser를 보기 위해서는 createChooser() 메소드를 사용하여 Intent 만들고 startActivity()에 이 인텐트를 전달해야 합니다.

예:

 Intent intent = new Intent(Intent.ACTION_SEND);

 ...


 // Always use string resources for UI text.

 // This says something like "Share this photo with"

 String title = getResources().getString(R.string.chooser_title);

 // Create intent to show chooser

 Intent chooser = Intent.createChooser(intent, title);


 // Verify the intent will resolve to at least one activity

 if (intent.resolveActivity(getPackageManager()) != null) {

     startActivity(chooser);

 }


 Chooser는 createChooser() 메소드에 전달된 인텐트에 응답하는 앱의 목록을 다이얼로그에 표시합니다. 그리고 Dialog의 제목에는 제공되어진 Text 를 사용합니다.

반응형

+ Recent posts