내에서 시작하려고 BroadcastReceiver
합니다 Service
. 내가하려는 것은 service
수신 문자 메시지를 수집하고 수신 전화를 기록 하는 백그라운드를 실행하는 것입니다. 이 문제를 해결하는 가장 좋은 방법은 service
둘 중 하나를 분류 할 수있는 브로드 캐스트 수신기를 통합하는 실행을하는 것입니다.
어떻게해야합니까? 이미 서비스를 실행하고 있습니다.
답변:
서비스가 이미 설정되었으므로 서비스에 broadcast receiver를 추가하기 만하면됩니다.
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals("android.provider.Telephony.SMS_RECEIVED")){
//action for sms received
}
else if(action.equals(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED)){
//action for phone state changed
}
}
};
귀하의 서비스에서 다음을 onCreate
수행하십시오.
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
filter.addAction(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED);
filter.addAction("your_action_strings"); //further more
filter.addAction("your_action_strings"); //further more
registerReceiver(receiver, filter);
그리고 귀하의 서비스에서 onDestroy
:
unregisterReceiver(receiver);
에서 언급 한 필터에 대한 방송을 수신하는 것이 좋습니다 onCreate
. 필요한 경우 권한을 추가해야합니다. 예를 들어
<uses-permission android:name="android.permission.RECEIVE_SMS" />
더 나은 패턴은 독립형 BroadcastReceiver
. 이렇게하면 앱 Service
이 실행 중인지 여부에 관계없이 브로드 캐스트에 응답 할 수 있습니다 . 실제로이 패턴을 사용하면 지속적으로 실행될 필요가 Service
완전히 제거 될 수 있습니다 .
BroadcastReceiver
매니페스트에를 등록하고 별도의 클래스 / 파일을 만듭니다.
예 :
<receiver android:name=".FooReceiver" >
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
수신자가 실행되면에 Intent
( Bundle
)를 전달 Service
하고에 응답하기 만하면 됩니다.onStartCommand()
.
예 :
public class FooReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// do your work quickly!
// then call context.startService();
}
}
Service
아직 실행 중이 지 않은 경우를 시작 하거나 실행중인 Intent
경우 새를 전달합니다 (에서 검색 용 onStartCommand
). 당신은 단지이 때 실행하려는 경우 Service
라이브, 당신은 프로그램 활성화 / 비활성화 할 수 Receiver
관통 구성 요소 PackageManager
의 setComponentEnabledSetting()
.
Receiver
때만 살아있는 것을 원한다면 최선의 선택이 될 수 있습니다 Service
.