很抱歉,如果我在这里遇到了很多问题,但是花了三天时间,我找不到解决办法
在我的应用程序中,我尝试制作诸如Whats App或Messenger之类的东西,不同之处在于用户会将文本消息发送到服务器上的MySql DB,而我的客户服务团队将回答此消息
在这里我有两种情况,有时会需要它
第一个:当应用没有连接或无法与服务器联系时,应用将检查连接并尝试每1分钟发送一次消息。
第二个::当用户成功发送消息时,应用程序将每隔3分钟检查一次是否已在数据库上得到答复。
因为我是android的新手 并且由于无法使用Firebase,因为如果我的应用程序会吸引许多用户,则费用较高! 我正在考虑使用服务在每种情况下通过广播接收器启动警报。
注意:这两种情况永远不会同时发生。因此,这些服务或警报将永远无法协同工作。
如果我们没有连接,则将第一个启动,并在连接完成时将其关闭并启动第二个。并且如果我们有连接将仅启动第二项服务。
我将通过带有活动中if语句的sharedPreferences条目对其进行控制 赞:如果sharedPreferences具有价值,则在另一个价值停止服务的情况下启动服务
这里的问题... 第一个服务及其警报和接收器在我需要的指定时间内成功工作
但第二个没有 该服务只会启动,但警报和接收器不会启动
我不知道我在哪里做错
这是清单代码:
<service
android:name=".SECONDservice"
android:enabled="true"
android:exported="false"/>
<service
android:name=".FIRSTservice"
android:enabled="true"
android:exported="false" />
//This is my FIRST alarm (I changed the names to explain the example)
<receiver
android:name=".FIRSTalarm"
android:process=":remote"/>
<receiver
android:name=".SECONDalarm"
android:process=":remote"/>
//This receiver to check if the phone reboot and the app need to start service again.
<receiver android:name=".AlarmAutoStart">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
这是第一个服务代码:
public class FIRSTservice extends Service {
FIRSTalarm FIRSTalarm = new FIRSTalarm();
public void onCreate ()
{
super.onCreate();
}
@Override
public int onStartCommand (Intent intent,int flags, int startId) {
FIRSTalarm.setAlarm(this);
return START_STICKY;
...
第一个警报代码:
public class FIRSTalarm extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent)
{
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyAPP:mytag");
wl.acquire();
// My Check Connection code here
wl.release();
}
public void setAlarm(Context context)
{
AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, FIRSTalarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, pi); // Millisec * Second * Minute
}
public void cancelAlarm(Context context)
{
Intent intent = new Intent(context, FIRSTalarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}
这是第二个服务代码:
public class SECONDservice extends Service {T
SECONDalarm SECONDalarm = new SECONDalarm();
public void onCreate ()
{
super.onCreate();
}
@Override
public int onStartCommand (Intent intent,int flags, int startId) {
SECONDalarm.setAlarm(this);
return START_STICKY;
...
以上所有方法均在指定的时间成功完成
此警报中的问题(无效)
第二个警报代码
public class SECONDalarm extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
PowerManager pm2 = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl2 = pm2.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyAPP:mytag2");
wl2.acquire();
// My code.
Toast.makeText(context, "Second Alarm start?!!", Toast.LENGTH_LONG).show(); // For example
wl2.release();
}
public void setAlarm(Context context)
{
AlarmManager am2 =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i2 = new Intent(context, SECONDalarm.class);
PendingIntent pi2 = PendingIntent.getBroadcast(context, 1, i2, 0);
am2.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 180000, pi2);
}
public void cancelAlarm(Context context)
{
Intent intent3 = new Intent(context, SECONDalarm.class);
PendingIntent sender3 = PendingIntent.getBroadcast(context, 1, intent3, 0);
AlarmManager alarmManager3 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager3.cancel(sender3);
}
}
预先感谢
答案 0 :(得分:0)
u可以使用 workmanager 。您可以在工作管理器中使用 PeriodicTimeWorkRequest 来重复完成工作。 Workmanager将在广播接收器中执行所有操作,等等。不需要维护它。 请参阅:Work manager in android