2016-04-27 27 views
0
public class SchedulerEventService extends Service { 
    private static final String APP_TAG = "com.hascode.android.scheduler"; 
    Context contxt; 

    @Override 
    public IBinder onBind(final Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(final Intent intent, final int flags, 
      final int startId) { 
     Log.d(APP_TAG, "event received in service: " + new Date().toString()); 
     Toast.makeText(contxt, "Fire", 1000).show(); 

     return Service.START_NOT_STICKY; 
    } 

} 



public class SchedulerSetupReceiver extends BroadcastReceiver { 
    private static final String APP_TAG = "com.hascode.android"; 

    private static final int EXEC_INTERVAL = 20 * 1000; 

    @Override 
    public void onReceive(final Context ctx, final Intent intent) { 
     Log.d(APP_TAG, "SchedulerSetupReceiver.onReceive() called"); 
     AlarmManager alarmManager = (AlarmManager) ctx 
       .getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(ctx, SchedulerEventReceiver.class); // explicit 
                    // intent 
     PendingIntent intentExecuted = PendingIntent.getBroadcast(ctx, 0, i, 
       PendingIntent.FLAG_CANCEL_CURRENT); 
     Calendar now = Calendar.getInstance(); 
     now.add(Calendar.SECOND, 20); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
       now.getTimeInMillis(), EXEC_INTERVAL, intentExecuted); 

     Toast.makeText(ctx, "Fire", 1000).show(); 
    } 

} 


public class SchedulerEventReceiver extends BroadcastReceiver { 
    private static final String APP_TAG = "com.hascode.android"; 

    @Override 
    public void onReceive(final Context ctx, final Intent intent) { 
     Log.d(APP_TAG, "SchedulerEventReceiver.onReceive() called"); 
     Intent eventService = new Intent(ctx, SchedulerEventService.class); 
     ctx.startService(eventService); 
     Toast.makeText(ctx, "Fire", 1000).show(); 
    } 

} 




<service 
      android:name="com.example.tataalarmmanger.SchedulerEventService" 
      android:process=":hascode_process" > 
     </service> 

     <receiver 
      android:name="com.example.tataalarmmanger.SchedulerEventReceiver" 
      android:process=":hascode_process" > 
     </receiver> 
     <receiver 
      android:name="com.example.tataalarmmanger.SchedulerSetupReceiver" 
      android:process=":hascode_process" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       <action android:name="android.intent.action.USER_PRESENT" /> 
      </intent-filter> 
     </receiver> 

日程告警启动服务这是我的代码,当我运行这段代码我不能够启动服务,我要安排动态时间报警其中来自服务,我已经设置时间,它应该重复火灾每20秒钟报警我已经调用LOG.d获得时间,但没有得到日期请建议我在哪里做错了。无法在背景中的Android

+0

你定义的所有的这些清单中? –

+0

是看我的代码 –

+0

@VivekMishra做u有我的查询任何解决方案 –

回答

0

延伸WakefulBroadcastReceiver,而不是简单的广播接收器

+0

相当可靠的我有变化还是同样的问题,无法获得时间每20秒 –

+0

你能告诉我我在哪里犯错吗 –

0

尝试此类延伸服务

public class SchedulerEventService extends Service { 
    private static final String APP_TAG = "com.hascode.android.scheduler"; 
    Context contxt; 
private static final String APP_TAG = "com.hascode.android"; 

    private final long EXEC_INTERVAL = 20 * 1000; 

    @Override 
    public IBinder onBind(final Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(final Intent intent, final int flags, 
      final int startId) { 

PendingIntent intentExecuted = PendingIntent.getBroadcast(ctx, 0, i, 
       PendingIntent.FLAG_CANCEL_CURRENT); 
     Calendar now = Calendar.getInstance(); 
     now.add(Calendar.SECOND, 20); 
     alarmManager.setExactRepeating(AlarmManager.RTC_WAKEUP, 
       System.currentTimeMillis(), EXEC_INTERVAL, intentExecuted); 
     Log.d(APP_TAG, "event received in service: " + new Date().toString()); 
     Toast.makeText(contxt, "Fire", 1000).show(); 

     return Service.START_STICKY; 
    } 

}