2016-09-23 2 views
1

У меня возникла проблема с перераспределением задач (с сигнализацией). Я попытался установить задачу на точное время и дату в будущем, после чего я закрыл эмулятор, а затем снова открою его после что ожидание всплывающего макета и когда время и дата наступили, я получил ошибку, которая говорит, что не удается открыть (приложение/действие) на экране, также в logcat я не вижу ошибок (что, вероятно, приложение закрыто), Поэтому я не уверен, где именно я сделал что-то неправильно.Не удалось запустить намерение после BOOT_COMPLETED

Вот код, который я использовал для службы

public class ChibiReminderService extends WakefulIntentService { 
Date date; 
private long milliseconds = 0; 
public ChibiReminderService() { 
     super("ChibiReminderService");` 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     DatabaseSched db = DatabaseSched.getInstance(this); //get access to the instance of DatabaseSched 
     sched_lists alarm = new sched_lists(); 

     List<DatabaseSource> tasks = db.getListSched(); //Get a list of all the tasks there 
     for (DatabaseSource task : tasks) { 
      // Cancel existing alarm 
      alarm.cancelAlarm(this, task.getId()); 
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm a"); 

      try { 
        date = format.parse(task.getDueDateTime()); 
       milliseconds = date.getTime(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      //regular alarms 
      if(milliseconds >= System.currentTimeMillis()){ 
       alarm.setAlarm(this, task.getId()); 
      } 
     } 
     super.onHandleIntent(intent); 
    } 
} 

OnBootReceiver

public class OnBootReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    WakefulIntentService.acquireStaticLock(context); //acquire a partial WakeLock 
    context.startService(new Intent(context, ChibiReminderService.class)); //start ChibiReminderService 
} 

} 

Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.majimechibireminder2" 
    android:versionCode="1" 
    android:versionName="1.0" android:installLocation="preferExternal"> 

    <uses-sdk 
     android:minSdkVersion="16" 
     android:targetSdkVersion="19" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" android:persistent="true"> 
     <receiver android:name=".OnBootReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

     <receiver android:name=".AlarmReceiver"></receiver> 
     <service android:name=".ChibiReminderService" > 
    </service> 

Здесь

+0

Вам нужно зарегистрировать вас в On-On-On? – Mohit

+1

Если произошел сбой приложения и возникла ошибка, вы обязательно получите выход logcat. Удалите все фильтры и выберите настройку по умолчанию, чтобы отображать каждый вывод. – Opiatefuchs

+0

опубликовать файл манифеста. – Mohit

ответ

1

Вам необходимо явно вызвать close на подключение к базе данных, которая отсутствует, поэтому добавьте его либо в конце getListSched функции

List<DatabaseSource> getListSched(){ 
.. 
..// your code 
    yourSQLiteDatabaseObject.close(); 
} 

или

если ваш yourSQLiteDatabaseObject экземпляр является публичным, то вы можете сделать это перед циклом

List<DatabaseSource> tasks = db.getListSched(); 
db.yourSQLiteDatabaseObject.close(); 
     for (DatabaseSource task : tasks) { 

Примечание: yourSQLiteDatabaseObject будет объектом SQLiteDatabase внутри DatabaseSched класса или вам нужно искать для цепь, если она не в классе DatabaseSched;

Смежные вопросы