티스토리 뷰

728x170

ADB 명령어를 사용하여 Intent를 다른 패키지에 보내는(브로드캐스트) 방법을 소개합니다.

 

어떤 리시버가 잘 동작하고 있는지 테스트를 하기 위해 ADB로 인텐트를 보낼 수 있고, 다른 앱이 잘 동작하는지 확인해보고 싶을 때 인텐트를 보낼 수 있습니다.

 

Action을 갖고 있는 Intent 보내기

"adb shell am broadcast <intent>"는 <intent>를 브로드캐스트하여 다른 패키지에 전달하는 명령어입니다.

 

<intent>는 인자로 전달하면 내부적으로 파싱하여 Intent 객체를 만드며, 액션의 경우 "-a <action name>"처럼 전달하면 됩니다.

 

따라서, 아래 예제는 CUSTOM_ACTION을 갖고 있는 인텐트를 브로드캐스트합니다.

 

adb shell am broadcast -a android.intent.action.CUSTOM_ACTION

 

Action, Category를 갖고 있는 Intent 보내기

액션과 함께 카테고리 정보를 인텐트에 추가하려면,  "-a <action name> -c <category name1> -c <category name2>" 처럼 여러 카테고리를 입력할 수 있습니다.

adb shell am broadcast -a android.intent.action.CUSTOM_ACTION -c android.intent.category.CUSTOM_CATEGORY

참고로, Intent에 액션은 하나만 입력 가능하지만 카테고리는 0개 이상 입력 가능하기 때문에 "-c"를 여러번 입력하여 여러 카테고리를 입력할 수 있습니다. 하지만 "-a"는 하나만 입력 가능합니다.

 

Data를 갖고 있는 Intent 보내기

URI 같은 data 정보도 함께 전달하려면, "-d <data>" 처럼 인자를 전달하시면 됩니다. data는 URI로, scheme, host, port 등의 정보를 갖고 있는 데이터 주소입니다.

adb shell am broadcast -a android.intent.action.CUSTOM_ACTION -d https://naver.com

 

명시적 Intent 보내기

지금까지 소개한 예제는 모두 암시적 인텐트를 브로드캐스트하는 명령어였습니다. 암시적 인텐트란, 수신하는 패키지가 명확히 정해져있지 않고, Intent의 Action, Category와 일치하는 모든 리시버(앱)에게 전달되는 인텐트를 의미합니다.

 

반면에 명시적 인텐트는, 수신하는 패키지가 명확히 정해져있는 인텐트입니다.

 

아래 예제에서 "-p <package name>" 처럼 패키지 이름을 입력하면 이 인텐트는 <package name>으로만 전달됩니다.

adb shell am start -a android.intent.action.CUSTOM_ACTION -p com.example.sample

 

다른 방법으로, "-n <package name>/<component name>"을 입력하면 수신하는 Component까지 지정할 수 있습니다. 수신하는 리시버가 정해져있기 때문에 Action, Category 등은 설정하지 않아도 해당 리시버로 전달이 됩니다. (만약 리시버에서 액션 정보를 읽고 어떤 처리를 하도록 구현되었다면, 입력해야 함)

adb shell am start -n com.example.sample/com.example.sample.receiver
그리드형
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함
세로형