2016-05-03 16 views
2

デバイスの再起動後にスケジュールされたタスクが機能しなくなるという問題が発生しました。私は、これがAlarm Managerの通常の動作であり、BOOT_COMPLETEDアクションを使用する必要があると通知されました。残念ながら、それはまだ動作していません。ここで私が持っているものであるAndroid Alarm Managerでの問題、ブート完了

メイン/ランチャー活動

public class launch_activity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_launch_activity); 

     File dbFile = new File(getFilesDir(), "bk.db"); 
     if(!dbFile.exists()) { 
      try { 
       InputStream localDB = getAssets().open("bk.db"); 
       OutputStream newDB = new FileOutputStream(dbFile); 
       byte[] buffer = new byte[1024]; 
       int read; 

       while ((read = localDB.read(buffer)) > 0) { 
        newDB.write(buffer, 0 , read); 
       } 

       localDB.close(); 
       newDB.close(); 

      } catch(IOException e) { 
       Log.e(this.getClass().toString(), "IO Error!"); 
      } 
     } 

     SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE); 
     SharedPreferences.Editor editor = preferences.edit(); 
     if(!(preferences.contains("User"))) { 
      editor.putString("User", "admin"); 

      editor.putString("Pass", "admin"); 
      editor.commit(); 
     } 
    } 

    protected void onStart() { 
     super.onStart(); 


     SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE); 
     Intent i = new Intent(this, screenSaver.class); 
startService(i); 

     if (!(preferences.getBoolean("configured", false))) { // app has not yet been set-up 

      // set the timer 

      Intent downloadIntent = new Intent(launch_activity.this, downloadReceiver.class); 
      PendingIntent pending = PendingIntent.getBroadcast(launch_activity.this, 0, downloadIntent, 0); 
      final Calendar cal = Calendar.getInstance(); 
      cal.setTimeInMillis(System.currentTimeMillis()); 
      cal.set(Calendar.HOUR_OF_DAY, 4); 

      final AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 

      manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + 1000, AlarmManager.INTERVAL_DAY, pending); 


      class downloadFinishedReceiver extends BroadcastReceiver { 
       private DownloadManager dManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
       @Override 
       public void onReceive(Context context, Intent intent) { 
        String action = intent.getAction(); 
        if(DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { 
         long downloadID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); 
         DownloadManager.Query query = new DownloadManager.Query(); 
         query.setFilterById(downloadID); 
         Cursor cursor = dManager.query(query); 
         if(cursor.moveToFirst()) { 
          int colIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS); 
          if (DownloadManager.STATUS_SUCCESSFUL == cursor.getInt(colIndex)) { 
           String uri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); 
           File file = new File(Uri.parse(uri).getPath()); 
           Log.e("passing", "success"); 

           try { 
            FileInputStream inputStream = new FileInputStream(file); 
            FileOutputStream fileOutputStream = context.openFileOutput(databaseHelper.DB_NAME, Context.MODE_PRIVATE); 
            byte[] buffer = new byte[1024]; 
            Log.e("passing", "try"); 
            int read; 

            while ((read = inputStream.read(buffer)) > 0) { 
             fileOutputStream.write(buffer, 0 , read); 
            } 

            fileOutputStream.close(); 
            inputStream.close(); 
            databaseHelper db = new databaseHelper(context); 
            db.copyDB(); 
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 

            Log.e("passing", "close"); 
           } catch (Exception ex) { 
            Log.e("Exception", ex.getMessage() + uri); 
           } 
          } 



         } 
        } 
       } 
      }; 


      registerReceiver(new downloadFinishedReceiver(), new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 


      Intent reminderHourlyIntent = new Intent(this, hourlyReminder.class); 
      PendingIntent reminderHourly = PendingIntent.getActivity(this, 0,reminderHourlyIntent, 0); 
      Calendar newCal = Calendar.getInstance(); 
      int nextHour = 60 - newCal.get(Calendar.MINUTE); 
      newCal.add(Calendar.MINUTE, nextHour); 
      // manager.setRepeating(AlarmManager.RTC_WAKEUP, newCal.getTimeInMillis() - (1000 * 60 * 10), 1000 * 60 * 60, reminderHourly); 
      manager.setRepeating(AlarmManager.RTC_WAKEUP, 60000, 1500 * 60, reminderHourly); 

      Intent reminderIntent = new Intent(this, reminder.class); 
      PendingIntent reminder = PendingIntent.getActivity(this, 0, reminderIntent, 0); 
      // manager.setRepeating(AlarmManager.RTC_WAKEUP, newCal.getTimeInMillis(), 1000 * 60 * 60 * 4, reminder); 
      manager.setRepeating(AlarmManager.RTC_WAKEUP, 1000 * 60 * 3, 1000 * 60 * 3, reminder); 


// redirect to set up 

      Intent intent = new Intent(this, midamcorp.com.burgerkingapp.preferences.class); 
      intent.putExtra("setUp", true); 
      startActivity(intent); 
      return; 
     } else { 
      Calendar cal = Calendar.getInstance(); 
      if (cal.get(Calendar.HOUR_OF_DAY) > 4 && cal.get(Calendar.HOUR_OF_DAY) < 10) // between 4 - 10 AM 
      { 

       Intent intent = new Intent(this, breakfastHome.class); 
       startActivity(intent); 
      } else if ((cal.get(Calendar.HOUR_OF_DAY) == 10 && cal.get(Calendar.MINUTE) < 28)) { // between 10 - 10:28 AM 
       Intent intent = new Intent(this, breakfastHome.class); 
       startActivity(intent); 
      } else { 
       Intent intent = new Intent(this, lunchHome.class); 
       startActivity(intent); 
      } 
     } 
    } 

    protected void onResume() { 
     super.onResume(); 
     this.onStart(); 
    } 

} 

bootReceiver

public class bootReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(final Context c, Intent i) { 

     if(i.getAction().equals("android.intent.action.BOOT_COMPLETED")) { 
      Intent downloadIntent = new Intent(c, downloadReceiver.class); 
      PendingIntent pending = PendingIntent.getBroadcast(c, 0, downloadIntent, 0); 
      final Calendar cal = Calendar.getInstance(); 
      cal.setTimeInMillis(System.currentTimeMillis()); 
      cal.set(Calendar.HOUR_OF_DAY, 4); 

      final AlarmManager manager = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE); 

      manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + 1000, AlarmManager.INTERVAL_DAY, pending); 


      class downloadFinishedReceiver extends BroadcastReceiver { 
       private DownloadManager dManager = (DownloadManager) c.getSystemService(c.DOWNLOAD_SERVICE); 
       @Override 
       public void onReceive(Context context, Intent intent) { 
        String action = intent.getAction(); 
        if(DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { 
         long downloadID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); 
         DownloadManager.Query query = new DownloadManager.Query(); 
         query.setFilterById(downloadID); 
         Cursor cursor = dManager.query(query); 
         if(cursor.moveToFirst()) { 
          int colIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS); 
          if (DownloadManager.STATUS_SUCCESSFUL == cursor.getInt(colIndex)) { 
           String uri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); 
           File file = new File(Uri.parse(uri).getPath()); 
           Log.e("passing", "success"); 

           try { 
            FileInputStream inputStream = new FileInputStream(file); 
            FileOutputStream fileOutputStream = context.openFileOutput(databaseHelper.DB_NAME, Context.MODE_PRIVATE); 
            byte[] buffer = new byte[1024]; 
            Log.e("passing", "try"); 
            int read; 

            while ((read = inputStream.read(buffer)) > 0) { 
             fileOutputStream.write(buffer, 0 , read); 
            } 

            fileOutputStream.close(); 
            inputStream.close(); 
            databaseHelper db = new databaseHelper(context); 
            db.copyDB(); 
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 

            Log.e("passing", "close"); 
           } catch (Exception ex) { 
            Log.e("Exception", ex.getMessage() + uri); 
           } 
          } 



         } 
        } 
       } 
      }; 


      c.registerReceiver(new downloadFinishedReceiver(), new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 



      Intent reminderHourlyIntent = new Intent(c, hourlyReminder.class); 
      PendingIntent reminderHourly = PendingIntent.getActivity(c, 0,reminderHourlyIntent, 0); 
      Calendar newCal = Calendar.getInstance(); 
      int nextHour = 60 - newCal.get(Calendar.MINUTE); 
      newCal.add(Calendar.MINUTE, nextHour); 
      // manager.setRepeating(AlarmManager.RTC_WAKEUP, newCal.getTimeInMillis() - (1000 * 60 * 10), 1000 * 60 * 60, reminderHourly); 
      manager.setRepeating(AlarmManager.RTC_WAKEUP, 60000, 1500 * 60, reminderHourly); 

      Intent reminderIntent = new Intent(c, reminder.class); 
      PendingIntent reminder = PendingIntent.getActivity(c, 0, reminderIntent, 0); 
      // manager.setRepeating(AlarmManager.RTC_WAKEUP, newCal.getTimeInMillis(), 1000 * 60 * 60 * 4, reminder); 
      manager.setRepeating(AlarmManager.RTC_WAKEUP, 1000 * 60 * 3, 1000 * 60 * 3, reminder); 
     } 

    } 
} 

と私のマニフェスト:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="midamcorp.com.burgerkingapp" 
    android:versionCode="1" 
    android:versionName="1.0"> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <service 
      android:name=".screenSaver" 
      android:enabled="true" 
      android:exported="true" 
      android:label="" 
      android:permission="android.permission.BIND_DREAM_SERVICE"> 
      <intent-filter> 
       <action android:name="android.service.dreams.DreamService" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </service> 

     <receiver android:name=".downloadReceiver" /> 
     <receiver android:name=".bootReceiver" 
      > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
      </intent-filter> 
     </receiver> 
     <activity android:name=".launch_activity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".lunchHome" 
      android:label="@string/title_activity_lunch_home" 
      android:theme="@style/AppTheme.NoActionBar" /> 
     <activity 
      android:name=".breakfastHome" 
      android:label="@string/title_activity_breakfast_home" 
      android:theme="@style/AppTheme.NoActionBar" /> 
     <activity 
      android:name=".lunchLTOs" 
      android:label="@string/title_activity_lunch_ltos" 
      android:parentActivityName=".lunchHome" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="midamcorp.com.burgerkingapp.lunchHome" /> 
     </activity> 
     <activity 
      android:name=".lunchStandard" 
      android:label="@string/title_activity_lunch_standard" 
      android:parentActivityName=".lunchHome" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="midamcorp.com.burgerkingapp.lunchHome" /> 
     </activity> 
     <activity 
      android:name=".breakfastStandard" 
      android:label="@string/title_activity_breakfast_standard" 
      android:parentActivityName=".breakfastHome" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="midamcorp.com.burgerkingapp.breakfastHome" /> 
     </activity> 
     <activity 
      android:name=".breakfastLTO" 
      android:label="@string/title_activity_breakfast_lto" 
      android:parentActivityName=".breakfastHome" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="midamcorp.com.burgerkingapp.breakfastHome" /> 
     </activity> 
     <activity 
      android:name=".preferences" 
      android:label="Preferences" 
      android:parentActivityName=".launch_activity"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="midamcorp.com.burgerkingapp.launch_activity" /> 
     </activity> 
     <activity 
      android:name=".login" 
      android:label="@string/title_activity_login" 
      android:parentActivityName=".launch_activity" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="midamcorp.com.burgerkingapp.launch_activity" /> 
     </activity> 
     <activity 
      android:name=".buildImage" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_build_image" 
      android:theme="@style/AppTheme.NoActionBar" /> 
     <activity 
      android:name=".changePass" 
      android:label="@string/title_activity_change_pass" 
      android:parentActivityName=".preferences" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="midamcorp.com.burgerkingapp.preferences" /> 
     </activity> 
     <activity 
      android:name=".storePicker" 
      android:theme="@style/Theme.AppCompat.Dialog" /> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" 
      android:theme="@style/AppTheme.NoActionBar" /> 
     <activity android:name=".hourlyReminder" 
      android:theme="@style/Theme.AppCompat.Dialog.Alert"/> 
     <activity android:name=".reminder" 
      android:theme="@style/Theme.AppCompat.Dialog.Alert"></activity> 
    </application> 

</manifest> 

これは私には非常にいくつかの問題を与えているものです;私は本当に助けを感謝します。

答えて

0

これはかなり古くなっていますが、私は最近同様のissueに遭遇しました。解決策は、プロジェクトをきれいにし、APKを再構築して再生成することでした。 Android Studioが古いAPKをキャッシュしているかどうか、または何かが連続したビルドで台無しになっても問題は解決しない場合は、正確にはわかりません。

さらに、電話を再起動する前に手動でアプリケーションを再起動するか、停止状態からアプリを削除するためにBOOTインテントを発行してみてください。

関連する問題