2014-12-16 4 views
0

시나리오 :이 알람은 다음, 동시에 설정 만 그들에게 보여 주어야한다시작 활동 브로드 캐스트 리시버에서 한 번만 사용하여 잠금 --Android

.

내 문제 :

나는 AlarmGoOffActivity을 의도 할 때의 시간을 전달하는 브로드 캐스트 리시버가 있습니다. 그러나 인 텐트를 전달하기 전에 AlarmGoOffActivity가 이미 실행되고 있는지 확인해야합니다. 내가 보았던 대답 중 하나에서. 나는이 접근법을 시도했다. 이전에는 두 경보가 모두 발사되었다. 지금, 어떤 경보도 발사되지 않습니다.

코드

MyBroadCastReceiver.java

if (AlarmGoOffActivity.running) { 
        BLog("AlarmActivity running"); 

      } else { 
       BLog("AlarmActivity not running "); 

       //set this variable true so that new broadcasts are not entertained 
       AlarmGoOffActivity.running = true; 

       Intent intent1 = new Intent(context, AlarmGoOffActivity.class); 
       intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       intent1.putExtra(DBHelper.COLUMN_ID, id); 
       String ext = extras.getString(DBHelper.TASK_TITLE); 
       if (ext != null) { 
        intent1.putExtra(DBHelper.TASK_TITLE, ext); 
       } 
       BLog("Starting alarm fire"); 
       context.startActivity(intent1); 
      } 

AlarmGoOffActivity.java

public class AlarmGoOffActivity extends ActionBarActivity { 

public static boolean running = false; 
..... 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    //changing the lock to false here. So a new one can start from 
    //broadcastreceiver 
    running = false; 
    } 
} 
,

첫 번째 발사를 기대하고있었습니다. 자, 어느 누구도 발사하지 않습니다. 왜 이것이 작동하지 않습니까? 그것은 정적 변수 (내가 놓친 몇 가지 개념) 때문입니까? 아니면 방송 사이의 10 밀리 초 또는 그 미만의 시간 간격 때문입니까? 당신의 도움을 주셔서 감사합니다.

답변

0

수신자가 의도를 처리 한 다음 빠르게 종료해야합니다. Activity이 표시되는지 여부 또는 활성 상태인지 여부를 결정해서는 안됩니다.

대신 Activity 재발신을 처리해야합니다. 특히 onNewIntent은 수신자로부터 전송 된 새로운 인 텐트를 처리하는 데 유용합니다. 활동 내에서 다시 알림을 처리하는 방법과 현재 Activity이있는 상태를 결정하는 플래그를 설정할 수 있습니다.

관련 문제