2013-04-02 2 views
0

안녕하세요. 저는 하나의 브로드 캐스트 수신기를 정의하고있는 Android 애플리케이션을 개발 중입니다. 내 활동에서 수신기를 호출하고 있습니다. 나는이 같은 방송 수신기를 정의하고있다 :브로드 캐스트 수신기는 장치를 다시 부팅 할 때만 작동합니다.

public class MyScheduleReceiver extends BroadcastReceiver { 

    private static final long REPEAT_TIME = 100 * 5; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("RRRRRRRRRRRRRRRRRRRRRRRR", "on receive"); 

    } 
} 

안드로이드 매니페스트 파일 I는 다음과 같이 정의하고 있습니다에서 :

<receiver android:name="abc.xyz.MyScheduleReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

이 주요 활동에 나는이처럼 내 방송 수신기를 호출 오전 :

//in activity oncreate 
startService(new Intent(this, MyScheduleReceiver.class)); 

제 문제는 서비스를 실제로 시작하지 않는 통화 시작 서비스입니다. 하지만 내 장치를 다시 시작하면 의도 필터에 "BOOT_COMPLETED"가 부여되어 서비스를 시작합니다. 내가 시작 서비스를 호출 할 때 실제로 원했던 것은 내 서비스가 시작되어야한다는 것입니다.

내가 잘못하고 있습니다. 이 문제를 해결하는 방법?

답변

1

혼란 스럽거나 질문을 잘 말하지 않고 있습니다. 매니페스트에있는 것 (그리고 Android가 일반적으로 작동하는 방식)은 BOOT_COMPLETED가 발생하면 정의한 BroadcastReceiver를 호출한다는 것입니다. 자동으로 활동이나 서비스를 시작하지 않습니다. 그렇게하고 싶으면 수신기의 onReceive 함수에서 startService 또는 startActivity를 호출해야합니다.

BroadcastReceivers를 시작하지 마십시오. 장기 배경 프로세스 인 서비스를 시작합니다. BroadcastReceivers를 등록하여 BOOT_COMPLETED와 같은 특별한 이벤트를 알립니다. 등록한 이벤트 중 하나가 발생하면 해당 클래스의 인스턴스를 만들고 onReceive를 호출합니다.

이렇게하면 문제가 해결되기를 바랍니다. 그렇지 않다면 서비스 및 브로드 캐스트 리시버에 대한 자습서를 다시 읽으십시오. 혼란스러운 두 가지가있는 것 같습니다.

1

startService 호출은 서비스 만 시작합니다. MyScheduleReceiver는 브로드 캐스트 수신기입니다. 브로드 캐스트 리시버를 트리거하려면 일반적으로 브로드 캐스트를 보내야하며 startService를 호출하지 않아야합니다.

3

실제로 여기서 일어나는 일은 활동을 시작하는 동안 브로드 캐스트 리시버를 응시 할 수 있으며이 브로드 캐스트 리시버가 BOOT_COMPLEATED 듣기를 시작하는 것입니다. 이것이 일어날 때 그것은 받는다 온다. 백그라운드에서 수행중인 프로세스를 시작해야하는 경우 BroadcastReciever의 서비스 insted를 사용할 수 있습니다. BroadcastRecievers이를 통해 happen.Go 몇 가지 이벤트를 수신하는 데 사용됩니다, 당신이 startService()

이를 대신 추가하지 브로드 캐스트를 보낼 필요가 방송을 시작하는 당신에게

Services

BroadcastReceiver

0

도움이 될 것입니다 startService(new Intent(this, MyScheduleReceiver.class));

Intent intent = new Intent(); 
intent.setAction("pakagename.MyScheduleReceiver"); 
sendBroadcast(intent); 

lps.

관련 문제