2015-09-07 68 views
0

我正在开发一个应用程序,每天通知报警管理器,它的工作很好,但我有一个问题,在设备重启我已经建立Boot_Complete广播接收器,但我想这个广播检查服务,如果它是在重新启动之前运行或未运行。 这是我MainActivity.java引导完成广播接收机

public void startMorning() 
{ 
    AlarmManager morningAlarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    Intent morningIntent = new Intent(AutoAzkarSetting.this,MorningReciver.class); 
    morningIntent.putExtra("numCheck",1); 
    moPending = PendingIntent.getBroadcast(AutoAzkarSetting.this, 0, morningIntent, 0); 
    Calendar morningCalender = Calendar.getInstance(); 
    morningCalender.setTimeInMillis(System.currentTimeMillis()); 
    morningCalender.set(Calendar.HOUR_OF_DAY, 8); 
    morningAlarm.setRepeating(AlarmManager.RTC_WAKEUP,morningCalender.getTimeInMillis()+12*60*60*1000,AlarmManager.INTERVAL_DAY,moPending); 
    Toast.makeText(this,"Morning Alarm Set",Toast.LENGTH_LONG).show(); 
} 

,这是MorningReceiver.java

public class MorningReciver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 

     Intent morIntent = new Intent(context, MorningService.class); 
     context.startService(morIntent); 
} 
} 

,这是MorningService.java

public class MorningService extends Service { 

WindowManager windowManager ; 
WindowManager.LayoutParams params , params2; 
ImageView azkarHead , closeHead; 
int morId ; 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

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

     String morningContent = this.getResources().getString(R.string.notyContent); 
     String morningSub = this.getResources().getString(R.string.moevSub); 
     Uri MorningSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     final NotificationManager morningManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
     final Notification morningNotification = new NotificationCompat.Builder(this) 
       .setContentTitle("Morning") 
       .setContentText(morningContent) 
       .setSubText(morningSub) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setSound(MorningSound) 
       .setAutoCancel(false) 
       .build(); 
     morningManager.notify(morId, morningNotification); 

     windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
     azkarHead = new ImageView(this); 
     azkarHead.setImageResource(R.drawable.ic_launcher); 
     params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); 
     params.gravity = Gravity.TOP | Gravity.RIGHT; 
     params.x = 0; 
     params.y = 150; 
     windowManager.addView(azkarHead, params); 
     azkarHead.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent morningIndex = new Intent(getBaseContext(), AzkarList.class); 
       morningIndex.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       morningIndex.putExtra("azkarHeadIndex", 0); 
       startActivity(morningIndex); 
       windowManager.removeView(azkarHead); 
       windowManager.removeView(closeHead); 
       morningManager.cancel(morId); 
      } 
     }); 

     closeHead = new ImageView(this); 
     closeHead.setImageResource(R.drawable.ic_clear_white); 
     params2 = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); 
     params2.gravity = Gravity.TOP | Gravity.RIGHT; 
     params2.x = 10; 
     params2.y = 260; 
     windowManager.addView(closeHead, params2); 
     closeHead.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       windowManager.removeView(azkarHead); 
       windowManager.removeView(closeHead); 
       morningManager.cancel(morId); 
      } 
     }); 
     startForeground(morId, morningNotification); 

    return START_STICKY; 
} 

所以是有任何想法如何做到这一点?????

回答

0

如果该服务已启动或停止共享的喜好,这样你可以存储:

@Override 
public void onCreate() { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    prefs.edit().putBoolean("ServiceRunning", true).apply(); 
} 

@Override 
public void onDestroy() { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    prefs.edit().putBoolean("ServiceRunning", false).apply(); 
} 

然后你就可以在开机完成接收检查服务是否正在运行是这样的:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
if (prefs.getBoolean("ServiceRunning", false)) 
    ... 

请注意,只有在单个进程中运行应用程序(默认设置)时,此功能才有效。

+0

感谢您的回答,但是当设备重新启动时,即使用户正在运行该服务也会销毁,并且会保存错误的值并且不会再运行 – khaledsamer