2016-05-03 11 views
2

Ich stieß auf ein Problem, bei dem meine geplanten Aufgaben nicht mehr funktionierten, sobald ein Gerät neu gestartet wurde. Ich wurde informiert, dass dies normales Verhalten für Alarm Manager ist und dass ich die Aktion BOOT_COMPLETED verwenden sollte. Leider funktioniert es immer noch nicht. Hier ist, was ichSchwierigkeiten mit Android Alarm Manager, Boot abgeschlossen

Die main/Launcher Aktivität haben

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); 
     } 

    } 
} 

und mein Manifest:

<?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> 

Dies ist etwas, das mich einige Mühe ganz gegeben hat ; Ich schätze wirklich jede Hilfe.

Antwort

0

Obwohl das ziemlich alt ist, stieß ich kürzlich auf eine ähnliche issue. Die Lösung bestand darin, das Projekt zu säubern, das APK neu zu erstellen und zu regenerieren. Nicht sicher ist genau, ob Android Studio eine alte APK zwischenspeichert, oder ob etwas mit aufeinanderfolgenden Builds durcheinander kommt, aber das hat mein Problem gelöst.

Versuchen Sie außerdem, die App manuell neu zu starten, bevor Sie das Telefon neu starten/die BOOT-Absicht ausgeben, um die App aus dem gestoppten Zustand zu entfernen.

Verwandte Themen