如何在Android中使用AlarmManager启动Activity?

如何在Android中使用AlarmManager启动Activity?,第1张

概述我已经通过十几个关于这个问题的教程和论坛答案,但仍然无法将一些工作代码放在一起.我会尽力保持这个问题:如何使用AlarmManager(在AndroidAPI中)在给定时间启动活动?这个问题的任何解决方案都可以.我最近的尝试是在下面.(导入省略.我希望MyActivity在程序打开后3秒启动,但它没有

我已经通过十几个关于这个问题的教程和论坛答案,但仍然无法将一些工作代码放在一起.我会尽力保持这个问题:

如何使用AlarmManager(在Android API中)在给定时间启动活动?这个问题的任何解决方案都可以.

我最近的尝试是在下面.

(导入省略.我希望MyActivity在程序打开后3秒启动,但它没有.没有错误消息可以说.)

public class AndroIDTest2Activity extends Activity {    /** Called when the activity is first created. */    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Context context = this;//.getApplicationContext();        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); // CORRECT        Intent intent = new Intent(context, myReceiver.class); // CORRECT        PendingIntent pending = PendingIntent.getbroadcast( context, 0, intent, 0 ); // CORRECT        manager.set( AlarmManager.RTC, System.currentTimeMillis() + 3000, pending ); // CORRECT        setContentVIEw(R.layout.main);    }}public class myReceiver extends broadcastReceiver {    public voID onReceive(Context context, Intent intent) {        Intent i=new Intent(context, myActivity.class);        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        context.startActivity(i);    }}public class myActivity extends Activity {    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.d("", "Elusive success");        setContentVIEw(R.layout.main);    }}

任何意见,将不胜感激.

请注意:我已经在清单中找到了myReceiver

解决方法:

万一其他人偶然发现 – 这是一些工作代码(在2.3.3模拟器上测试):

public final voID setAlarm(int seconds) {    // create the pending intent    Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);    // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    pendingIntent = PendingIntent.getbroadcast(MainActivity.this, 0,            intent, 0);    // get the alarm manager, and scedule an alarm that calls the receiver    ((AlarmManager) getSystemService(ALARM_SERVICE)).set(            AlarmManager.RTC, System.currentTimeMillis() + seconds                    * 1000, pendingIntent);    Toast.makeText(MainActivity.this, "Timer set to " + seconds + " seconds.",            Toast.LENGTH_SHORT).show();}public static class AlarmReceiver extends broadcastReceiver {    public voID onReceive(Context context, Intent intent) {        Log.d("-", "Receiver3");    }}

AndroIDManifest.xml中:

    <receiver androID:name="com.example.test.MainActivity$AlarmReceiver" >    </receiver>

BenLambell代码的问题:

>没有:

>将接收器移动到它自己的.java文件或
>使内部类静态 – 因此可以从外部访问它

>清单中未正确声明接收方:

>如果它是MainActivity中的内部类使用:
< receiver androID:name =“package.name.MainActivity $AlarmReceiver”>< / receiver>
>如果它在一个单独的文件中:
< receiver androID:name =“package.name.AlarmReceiver”>< / receiver>

如果你打算在接收者的onReceive(像我一样)中显示一个对话框:那是不允许的 – 只有活动可以启动对话框.这可以通过dialog activity来实现.

您可以使用AlarmManager直接调用活动:

Intent intent = new Intent(MainActivity.this, TriggeredActivity.class);PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_ONE_SHOT);((AlarmManager) getSystemService(ALARM_SERVICE)).set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + seconds * 1000, pendingIntent);
总结

以上是内存溢出为你收集整理的如何在Android中使用AlarmManager启动Activity?全部内容,希望文章能够帮你解决如何在Android中使用AlarmManager启动Activity?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1102531.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存