내부 클래스 브로드 캐스트 리시버를 사용하여 워치 독 기능을 만들려고합니다. 부모 클래스에서 생성자 안에 브로드 캐스트 리시버를 등록했지만 onReceive 클래스는 결코 트리거되지 않습니다.BroadcastReceiver 내부 클래스가 트리거되지 않습니다.
이 문제를 어떻게 해결할 수 있습니까? 고맙습니다.
워치 독 클래스 :
public class WatchDog {
private final String TAG = getClass().getSimpleName();
private static final String RECEIVER_WATCHDOG = "com.example.liviu.test_broadcastreceiver.receiver";
private final static String ACTION_WATCHDOG = "com.example.liviu.test_broadcastreceiver.action.watchdog";
private final static int ID_WATCHDOG = 40856342;
private final static int mTimeout = 1000;
public WatchDog (Context context) {
Log.d(TAG, ":::::::::::: Watchdog CONSTRUCTOR");
IntentFilter intentFilter = new IntentFilter(RECEIVER_WATCHDOG);
BroadcastReceiver receiver = new WatchDogReceiver();
context.registerReceiver(receiver, intentFilter);
setWatchdogTimer(context, true, mTimeout);
}
final class WatchDogReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, ":::::::::::: Watchdog received - ");
setWatchdogTimer(context, true, mTimeout);
}
}
public void setWatchdogTimer(Context context, boolean set, int timeout) {
Log.d(TAG, ":::::::::::: Watchdog START");
Intent intent = new Intent(context, WatchDogReceiver.class);
intent.setAction(ACTION_WATCHDOG);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, ID_WATCHDOG, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (set) {
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + timeout, alarmIntent);
} else {
alarmManager.cancel(alarmIntent);
}
}
}
MainActivity 및 분류 :
public class MainActivity extends AppCompatActivity {
private final String TAG = getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, ">>>>>>>>>>>> Activity START");
new WatchDog(getApplicationContext());
}
}는
로그 캣 만 도시되어
05-02 18:11:10.197 20415-20415/com.example.liviu.test_broadcastreceiver D/MainActivity: >>>>>>>>>>>> Activity START
05-02 18:11:10.197 20415-20415/com.example.liviu.test_broadcastreceiver D/WatchDog: :::::::::::: Watchdog CONSTRUCTOR
귀하의 수신기가 공개되지 않았으며, 귀하의 매니페스트에 있는지 확인하기 위해 두 번 확인합니다. –
정확히 어떻게 방송을 수신기에 보냅니 까? 현재 질문에있는 코드를 보면 수신기에 아무 것도 보내지 않는 것처럼 보이므로 그 로그는 내가 알 수있는 한 예상되는 결과입니다. –
반복 알람을 설정하려고합니까? –