Ben*_*ell 10 android alarmmanager
我已经通过十几个关于这个问题的教程和论坛答案,但仍然无法将一些工作代码放在一起.我会尽力保持这个问题:
如何使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
任何意见,将不胜感激.
请注意:我已经在清单中找到了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");
}
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中:
<receiver android:name="com.example.test.MainActivity$AlarmReceiver" >
</receiver>
Run Code Online (Sandbox Code Playgroud)
BenLambell代码的问题:
<receiver android:name="package.name.MainActivity$AlarmReceiver" ></receiver><receiver android:name="package.name.AlarmReceiver" ></receiver>如果你打算在接收者的onReceive(像我一样)中显示一个对话框:那是不允许的 - 只有活动可以启动对话框.这可以通过对话活动来实现.
您可以使用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);
Run Code Online (Sandbox Code Playgroud)
根据Java约定类名以大写字母开头。所以改变你的
"myReceiver" to "MyReceiver" and "myActivity" to "MyActivity".
Run Code Online (Sandbox Code Playgroud)
然后将您的接收器添加到清单文件中,如下所示。
<application
------------
<receiver android:name="MyReceiver"></receiver>
---------------------
</application>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17291 次 |
| 最近记录: |