2010-08-10 4 views
9

특정 시간에 일부 코드를 실행하려면 알람을 사용하고 싶습니다. 매니페스트에 등록 된 브로드 캐스트 수신기로 알람을 성공적으로 구현했지만이 방법은 브로드 캐스트 리시버에 별도의 클래스를 사용합니다.브로드 캐스트 수신기가있는 Android 알람 관리자가 매니페스트가 아닌 코드로 등록되었습니다.

다른 활동을 시작하는 데이 방법을 사용할 수는 있지만 기본 활동에서 메소드를 실행할 수는 없습니까?

(how can I notify a running activity from a broadcast receiver?)

그래서 나는 위와 같은 질문에 대해 답 설명 내 주요 활동 내 방송 수신기를 등록하기 위해 노력 해왔다.

private BroadcastReceiver receiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show(); 
     uploadDB();   
    } 
};  

public void onResume() { 
    super.onResume(); 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction(null); 

    this.registerReceiver(this.receiver, filter); 
} 

public void onPause() { 
    super.onPause(); 

    this.unregisterReceiver(this.receiver); 
} 

내가 알람 매니저와 함께 작동이 얻을 수 없었습니다 그러나, 나는 내가 방송 수신기에 알람 의도를 연결해야합니다 방법에 대한 확신입니다. 누구든지 활동에 알람 관리자 브로드 캐스트 수신기를 동적으로 등록하는 예를 보여줄 수 있습니까? 아니면 내가 어떻게하는지 설명해 줄래?

답변

15

어때?

Intent startIntent = new Intent("WhatEverYouWant"); 
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0); 
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent); 

그리고 다음 Manifest.xml 파일에

:
<receiver android:name="com.package.YourOnReceiver"> 
    <intent-filter> 
     <action android:name="WhatEverYouWant" /> 
    </intent-filter> 
</receiver> 

그래서 내가 아는 한 당신은 여전히 ​​매니페스트에 수신기를 선언해야합니다. 나는 당신이 당신의 활동 안에서 사적인 인스턴스로 그것을 설정할 수 있는지 확신하지 못한다. 당신은 당신의 액티비티 안에 onReceive를 선언하고 그것을 호출 할 수 있습니다 (만약 BroadcastReceiver가 인터페이스를 가지고 있다면 나는 알지 못합니다.)

+2

굉장한 데 성공했는데 매니페스트에 코드를 추가 할 필요가 없었습니다. 같은 이름의 인 텐트 필터로 방송 수신기를 프로 그램에 등록했습니다. – serenskye

+0

감사합니다. +1을드립니다. – Barrier

1

알람을 시작할 곳에서 알람 인 텐트를 시작하십시오. 알람을 듣고 자하는 곳에서 코드를 작성하십시오.

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0); 
       AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
       Calendar calendar = Calendar.getInstance(); 
       calendar.setTimeInMillis(System.currentTimeMillis()); 
       calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30)); 
       alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

수신자가 원하는 코드를 작성하십시오. 그리고 가장 적게 쓰십시오에서

<receiver android:name=".AlarmReceiver" android:process=":remote"/> 

당신은 또한 반복 경보를 둘 수 있습니다. 도움이 되었기를 바랍니다.

관련 문제