2017-05-26 72 views
0

當我設置鬧鈴,然後重新啓動設備時,鬧鈴停止工作。我正確註冊了BroadcastReciver,並創建了Boot BroadCastReciver,但設備重新啓動後仍不起作用。手機重啓後鬧鈴管理器不工作

我的代碼:

MainActivty爲首次設置報警:

public class MainActivity extends AppCompatActivity { 

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



     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString("language","1"); 
     editor.commit(); 

     setRecurringAlarm(this); 

    } 

    private void setRecurringAlarm(Context context) { 

     Calendar updateTime = Calendar.getInstance(); 
     updateTime.setTimeZone(TimeZone.getTimeZone("GMT+5:00")); 
     updateTime.set(Calendar.HOUR_OF_DAY, 3); 
     updateTime.set(Calendar.MINUTE, 00); 

     Intent intent = new Intent(context, Tasks.class); 
     PendingIntent recurringDownload = PendingIntent.getBroadcast(context, 
       0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarms = (AlarmManager) this.getSystemService(
       Context.ALARM_SERVICE); 
     alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
       updateTime.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY, recurringDownload); 
    } 
} 

BroadcastReciver任務:

public class Tasks extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

      Intent i = new Intent(); 
      i.setClassName(context, Main2Activity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 
     } 
} 

引導BroadcastReciver:

public class BootBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Calendar updateTime = Calendar.getInstance(); 
     updateTime.setTimeZone(TimeZone.getTimeZone("GMT+5:00")); 
     updateTime.set(Calendar.HOUR_OF_DAY, 3); 
     updateTime.set(Calendar.MINUTE, 00); 

     Intent i = new Intent(context, Tasks.class); 
     PendingIntent recurringDownload = PendingIntent.getBroadcast(context, 
       0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarms = (AlarmManager) context.getSystemService(
       Context.ALARM_SERVICE); 
     alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
       updateTime.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY, recurringDownload); 
    } 
} 

Androi dManifest:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission 
    android:name="android.permission.MODIFY_PHONE_STATE" 
    tools:ignore="ProtectedPermissions" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    . 
    . 
    . 

    <receiver android:name=".BootBroadcastReceiver" 
     android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
      <uses-permission android:name="android.permission.WAKE_LOCK" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
    <receiver android:name=".Tasks" 
     android:enabled="true"> 
    </receiver> 

</application> 

回答

1

您需要服務和廣播接收器,以便在移動設備重啓時喚醒您的應用程序。在這裏,我有服務代碼可能會幫助你(它完全適用於我的應用程序)。

服務

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.support.annotation.Nullable; 


public class MyService extends Service { 
    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     new GPSTracker(ReunirseService.this); 
     return START_STICKY; 
    } 
} 

接收機將接收結束啓動的意圖,將開始爲您服務。

import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 

    public class BootReceiver extends BroadcastReceiver { 
     RestartServiceReceiver alarm = new RestartServiceReceiver(); 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) 
      { 
      Intent i = new Intent(context, MyService .class); 
      context.startService(i); 
      } 

     } 
    } 

而且你需要添加項值

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

許可,還需要添加過濾器

 <receiver android:name=".BootReceiver"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
+0

你不加你在你的清單服務? @AmrishKakadiya –

+0

對不起,我忘了寫在這裏..添加'<服務android:name =「。MyService」>' –