
我已经通过十几个关于这个问题的教程和论坛答案,但仍然无法将一些工作代码放在一起.我会尽力保持这个问题:
如何使用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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)