현재 제가 구현 하고 있는 것은
재부팅을 했을때, 재부팅을 인지 하여, 이전에 등록했던 알람들을 디비에서 가져와 재등록 하는 기능입니다.
재부팅을 인지하고, 이전에 등록했던 알람들을 디비에서 검색을 하고 정보를 가져오는건 성공 했습니다.
하지만 문제는 정보를 가지고 알람을 등록하는 부분에서 오류가 나네요.
_am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000 , pIntent );
|
이부분에서 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AlarmManager.setRepeating(int, long, long, android.app.PendingIntent)' on a null object reference 이런 오류가 납니다. 찾아보니까 알람매니저(_am)를 초기화 해주지 않아서 일어난다는데, 전 분명
초기화를 해줬는데도 이러네요. 조언 부탁드리겠습니다!!
재부팅을 감지하게 되면
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if ( action.equals(Intent.ACTION_BOOT_COMPLETED) ) {
mDbOpenHelper = new alarm_DbOpenHelper(context.getApplicationContext());
try {
mDbOpenHelper.open();
} catch (SQLException e) {
e.printStackTrace();
}
alarm_DbOpenHelper.reRegist(context);
}
}
|
alarm_DbOpenHelper.reRegist(Context context)
public static Cursor reRegist(Context context) {
Cursor c = mDB.rawQuery( "Select _id, hour, minute, apm, day from alarm_table where BUTTON ='on'" , null );
if (c != null && c.getCount() != 0 ) {
c.moveToNext();
MainActivity.alarm_reRegist(context,c.getInt( 0 ), c.getInt( 1 ), c.getInt( 2 ), c.getString( 3 ), c.getInt( 4 ));
}
return c;
}
|
public static void alarm_reRegist(Context context, int getid, int hour, int minute, String apm, int day)
public class MainActivity extends AppCompatActivity {
private static final String TAG = "TestDataBase" ;
private static AlarmManager _am;
public static Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppThemeBlue);
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this ;
_am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
}
|
public static void alarm_reRegist(Context context, int getid, int hour, int minute, String apm, int day){
boolean [] week = { false , false , false , false , false , false , false , false };
Intent intent = new Intent(context, alarm_Receiver. class );
intent.putExtra( "weekday" , week);
PendingIntent pIntent = PendingIntent.getBroadcast(context, getid, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar cal = Calendar.getInstance();
if (apm.equals( "오후" )){
cal.set(Calendar.HOUR_OF_DAY, hour+ 12 );
} else {
cal.set(Calendar.HOUR_OF_DAY, hour);
}
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, 0 );
_am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000 , pIntent);
}
|
감사합니다!