gpt4 book ai didi

java - 警报管理器不启动android

转载 作者:行者123 更新时间:2023-12-01 05:08:47 24 4
gpt4 key购买 nike

在我的应用程序中,我正在尝试以下功能。我希望根据日期和时间,用户收到一些通知。

例如:

  1. 2013 年 9 月 9 日收到包含 message1 的通知
  2. 9 月 10 日 07.30,消息 2,
  3. 同一天,但 11.50,消息 3 等等...

我使用了警报和推杆通知,但它仅适用于第一个。因此,我进行了搜索,并指出我必须使用重复警报管理器。

在发布代码之前,我想澄清一些事情:1)我认为它应该像这样工作:我必须每 1-2 分钟检查一次,现在是什么时间,从存储事件的数组中获取下一个“时间”,并为此设置闹钟,对吧?然后考虑到这段代码将每 1-2 分钟运行一次,我将再次检查,获取下一个事件,设置该时间的闹钟等等。

我说得对吗?

因此,首先,我正在尝试实现一个重复警报管理器,每 1 分钟就会向我显示一条 Toast 消息(如果我这样做并用 get_next_event() 和 set_next_notification() 替换 toast 消息将完成我的工作想一想。- 这些功能在我的项目中运行良好,只设置了一个警报)。

但问题是,当我开始服务时,我什么也看不到。

这是我的代码:

Alarm.java

public class Alarm extends BroadcastReceiver 
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "Starting Alarm Manager", Toast.LENGTH_LONG).show(); // For example

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();

// Put here YOUR code.
Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example

wl.release();
}

public void SetAlarm(Context context)
{
Toast.makeText(context, "Setting Alarm Manager", Toast.LENGTH_LONG).show(); // For example

AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 , pi); // Millisec * Second * Minute
}

public void CancelAlarm(Context context)
{
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}

你的服务.java

public class YourService extends Service
{
Alarm alarm = new Alarm();
public void onCreate()
{
super.onCreate();
Toast.makeText(YourService.this, "Service Created", Toast.LENGTH_LONG).show(); // For example

}

public void onStart(Context context,Intent intent, int startId)
{
Toast.makeText(YourService.this, "Setting from Service", Toast.LENGTH_LONG).show(); // For example

alarm.SetAlarm(context);
}

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

DemoActivity.java

 public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

buttonStart = (Button) findViewById(R.id.buttonStart);
buttonStop = (Button) findViewById(R.id.buttonStop);

buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
}

public void onClick(View src) {
switch (src.getId()) {
case R.id.buttonStart:
Toast.makeText(ServicesDemo.this, "Button Pressed", Toast.LENGTH_LONG).show(); // For example
Log.d(TAG, "onClick: starting srvice");
startService(new Intent(this, YourService.class));
break;
case R.id.buttonStop:
Log.d(TAG, "onClick: stopping srvice");
stopService(new Intent(this, YourService.class));
break;
}
}

所以我按下按钮,我看到“按钮被按下”,我看到“服务已创建”,但随后没有显示警报启动的任何 toast 。当然,我每 1 分钟就什么都看不到。

这是我的 list 。

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">

<activity android:name=".ServicesDemo" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:enabled="true" android:name=".YourService" />
<receiver android:process=":remote" android:name="Alarm"></receiver>

</application>
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

</manifest>

那么我需要在代码或 list 中更改哪些内容?

最佳答案

我建议您使用AlarmManager来实现此目的:http://developer.android.com/reference/android/app/AlarmManager.html .

关于java - 警报管理器不启动android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12338668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com