2017-12-20 21 views
1

を再起動こんにちはアラームマネージャとユーザーがアラームを設定していると私は電話の再起動やブーツは、私がこれまでにこれを書いたときのためのデータベースにするが、そのはアンドロイドブートまたは

public class RestartAlarmsReceiver extends BroadcastReceiver { 
private static final String TAG = "alarm"; 
AlarmManager alarmManager; 
Intent mintent; 
PendingIntent pendingIntent; 
AlarmDbHelper dbHelper; 
long time; 
@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")|| intent.getAction(). 
      equals("android.intent.action.REBOOT")) { 

     dbHelper = new AlarmDbHelper(context); 
     List<ChildTour> alarms =dbHelper.getAlarms(); 


     for (int i =0;i<2;i++){ 
      alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
      mintent = new Intent(context,AlarmReceiver.class); 
      ChildTour Child = alarms.get(i); 
      mintent.putExtra("name",Child.getTime()); 
      mintent.putExtra("tourId",Child.getTourId()+""); 
      pendingIntent = PendingIntent.getBroadcast(context,Child.getTourId(),mintent,0); 
      Calendar calendar = Calendar.getInstance(); 
      calendar.set(Calendar.HOUR_OF_DAY, Child.getHour()); 
      calendar.set(Calendar.MINUTE, Child.getMin()); 

      time=(calendar.getTimeInMillis()-(calendar.getTimeInMillis()%60000)); 
      if(System.currentTimeMillis()>time) 
      { 
       if (calendar.AM_PM == 0) 
        time = time + (1000*60*60*12); 
       else 
        time = time + (1000*60*60*24); 
      } 
      alarmManager.set(AlarmManager.RTC_WAKEUP,time, pendingIntent); 
      Log.i("alarm","Alarm set With Id : "+Child.getTourId() +"Hour: " +Child.getHour()+"Minute: "+Child.getMin()); 
     } 
} 
} 

とこれを動作していないことを保存します私のマニフェストは、私は再起動を試してみて、自分の携帯電話に電源をオフにし、

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

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

    <receiver android:name=".RestartAlarmsReceiver" 
     android:enabled="false"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      <action android:name="android.intent.action.REBOOT"/> 
      <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> 
     </intent-filter> 
    </receiver> 

を仕事と私のalarmReciverクラスは私が私が働いて得た

+0

どのようなエラーが表示されるのですか... – Dilip

+0

リブートレシーバが呼び出されない場所をテストしたデバイスはどれですか? – ADM

+0

@Dilip no errors nothing – Osairon

答えて

1

マニフェストアクションは次のようになります。

<receiver 
     android:name=".receivers.BootCompleteReceiver" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter android:priority="1000"> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON"/> 
      <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/> 
      <action android:name="android.intent.action.REBOOT"/> 
     </intent-filter> 
    </receiver> 

iは、リブート放送を得ていないの問題となることがオプションを開始オート上述したように。デバイスが自動起動している場合は、アプリケーションで有効にします。設定>権限>自動スタートを選択します。これは手動でのみアクセスできます。つまり、プログラムで有効/無効を切り替えるAPIはありません。これらのリンクをさらに確認するにはLink1Link2/

0

を働いているではないことをファイルですが、それは、簡単ではありませんでしたまた、私は思うのタブレット/電話

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <service android:name="SendDataService" /> 
    <receiver 
     android:name=".BootReciever"> 

     <intent-filter> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 

     </intent-filter> 
    </receiver> 
0

あなたはこの

マニフェストのようなあなたのマニフェストにブートレシーバを追加する必要があります:

または

を根ざしする必要はないかもしれませんあなたはこのようにマニフェスト試してみてください
<receiver android:name=".OnBootReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    </intent-filter> 
</receiver> 

そして、このようなブートレシーバ・クラスを作成します...

受信機:

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

public class OnBootReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context ctxt, Intent intent) { 
AlarmHelper.setAlarm(ctxt); 
} 
} 

マイアラームヘルパークラスは、このような日アラームの簡単なスタートです...

警報ヘルパークラス:

public class AlarmHelper { 

public static void testAlarm(Context context) { 
Calendar when = Calendar.getInstance(); 
when.add(Calendar.SECOND, 10); 
setAlarm(context, when);  
} 

public static void setAlarm(Context context) { 
Calendar when = Calendar.getInstance(); 
when.add(Calendar.DAY_OF_YEAR, 1); 
when.set(Calendar.HOUR_OF_DAY, 0); 
when.set(Calendar.MINUTE, 0); 
when.set(Calendar.SECOND, 0); 
setAlarm(context, when); 
} 

    @SuppressLint("SimpleDateFormat") 
private static void setAlarm(Context context, Calendar when) { 

SharedPreferences prefs = PreferenceManager 
.getDefaultSharedPreferences(context.getApplicationContext()); 

Boolean showNotifications = prefs.getBoolean("PREF_SHOW_NOTIFICATIONS", 
false); 

if (showNotifications) {  
AlarmManager am = (AlarmManager) context 
.getSystemService(Context.ALARM_SERVICE); 

am.setRepeating(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), AlarmManager.INTERVAL_DAY, getPendingIntent(context.getApplicationContext())); 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

Log.i(TAG, "Alarm set " + sdf.format(when.getTime())); 
} 
} 
関連する問題