[Android] ADB로 Intent 보내기, 실행시키기
Android에서 Intent는 Activity를 실행시키거나, 브로드캐스트를 보낼 때 사용됩니다.
그래서, Intent를 실행한다거나, 보낸다라는 말은 인텐트를 사용하여 액티비티를 실행하면서 Intent를 전달하면서 인텐트가 갖고 있는 데이터, Extra 등의 정보들도 함께 전달한다는 의미가 됩니다.
코드를 사용하여 이런 동작을 수행할 수 있지만, 테스트 목적으로 ADB를 사용하여 간단히 인텐트를 보내는 방법도 있습니다.
1. 브로드캐스트 인텐트 전달
1.1 Action만 갖고 있는 인텐트
아래와 같이 Action만 갖고 있는 인텐트를 보낼 수 있습니다. 이 인텐트를 수신하는 앱은 명령어에 입력한 Action을 수신하는 Receiver를 등록한 앱들이 됩니다.
adb shell am broadcast -a android.intent.action.CUSTOM_ACTION
1.2 Action, Category를 갖고 있는 Intent
만약 Action과 Category를 함께 갖고 있다면 -c
를 사용하여 카테고리를 입력할 수 있습니다.
adb shell am broadcast -a android.intent.action.CUSTOM_ACTION -c android.intent.category.CUSTOM_CATEGORY
1.3 Data도 갖고 있는 Intent
Action과 Category와 함께 데이터 정보도 갖고 있는 인텐트의 경우, -d
를 사용하여 데이터(URI)를 입력할 수 있습니다.
adb shell am broadcast -a android.intent.action.CUSTOM_ACTION -c android.intent.category.CUSTOM_CATEGORY -d https://naver.com
1.4 타겟 지정하여 Intent 보내기
위의 예제는 타겟이 정해지지 않은 인텐트를 보내는 예제입니다. 즉, 인텐트를 수신하는 Receiver는 모두 수신할 수 있습니다.
만약 특정 앱에게만 보내고 싶다면 아래와 같이 -p
로 타겟 패키지를 입력하시면 그 패키지로만 전달됩니다.
adb shell am start -a android.intent.action.CUSTOM_ACTION -p com.example.sample
Action 등의 정보 없이, -n
으로 패키지명과 Component 이름을 입력하여 바로 보내는 것도 가능합니다.
adb shell am start -n com.example.sample/com.example.sample.receiver
2. 액티비티 실행
액티비티를 실행하는 것도 브로드캐스트로 인텐트를 보내는 것과 비슷합니다.
차이점은 am broadcast
명령어 대신에 am start
명령어를 사용하시면 됩니다.
$ adb shell am start -a ACTION -c CATEGORY1 -c CATEGORY2 -d DATA
예를 들어, 아래와 같이 입력하면, 이 인텐트와 매칭되는 인텐트 필터를 선언한 액티비티가 실행됩니다.
$ adb shell am start -a android.intent.action.EXAMPLE -c android.intent.category.TEST -d https://google.com
자바 코드로 표현하면 이렇게 startActivity()
를 호출하는 것과 동일합니다.
Intent intent = new Intent();
intent.setAction(action);
intent.addCategory(category1);
intent.addCategory(category2);
...
startActivity(intent);