2017-05-26 22 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 dマニフェスト:

<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" /> 

RECEIVE_BOOT_COMPLETED の権限を追加する必要があり、また、あなたはあなたがあなたのマニフェストでサービスを追加していないフィルタ

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

を追加する必要がありますか? @AmrishKakadiya –

+0

申し訳ありません、私はここに書くことを忘れてしまいました。 '' –

関連する問題