私は、私が作ってきたこのゲームをほぼ完成させました。それはおもちゃのアプリであり、私に教えるだけの役割を果たしています。だから私はそれをtoyappと呼んでいます。
アラームマネージャー、インテント、およびブロードキャストについて学んだことを使用して、アプリケーションを強制終了しようとしています。アラームを 10 秒間鳴らしてからメッセージをウィジェットに出力する方法を見つけました。これは、次のチュートリアルhereに基づいています。
これを呼び出して、このアプリケーションを終了させようとしていることをユーザーに警告してから閉じることができると思っていました。しかし、AlarmReceiver がまったく呼び出されていないように見えますか? 私のゲームはただプレイし続けます。
私が変更したコードは、私のtoyapp用に以下にあります。
public void timingService(Context context, Activity activity){
// get a Calendar object with current time
Calendar cal = Calendar.getInstance();
// add 5 minutes to the calendar object
cal.add(Calendar.SECOND, 5);
Intent intent = new Intent(context, AlarmReciever.class);
intent.putExtra("alarm_message", "Game will exit soon");
// In reality, you would want to have a static variable for the request code instead of 192837
PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager) activity.getSystemService(context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
}
次に、Receiver コードをアクティビティ クラスに配置します。これは次のとおりです。
public class AlarmReciever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
try{
Bundle bundle = intent.getExtras();
String message = bundle.getString("alarm_message");
Toast.makeText(context, message, Toast.LENGTH_LONG).show(); //Give message
toyappActivity.this.finish(); //Exit the game
}catch(Exception e){
Toast.makeText(context, "There was an error somewhere", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
}//End of AlarmReciever
このアプローチのインスピレーションとなったのは、ここで読んだ次の記事です。
最終的にやりたいことはシンプルです。アラームの有無にかかわらずゲームをプレイするオプションがあります。動きが検出されたら、加速度計センサーでアラームマネージャーをリセットする予定です。それ以外の場合は、カウントダウンしてからゲームをキャンセルします。
私はインテントを直接理解していないと思いますが、これが私のクラッシュポイントです。これがばかげているように思われる場合は申し訳ありませんが、私は今かなりひどい風邪をひいており、これは私にはうまくいくようです. しかし、コンピューターは決して嘘をつきません。私たちの心だけです。
いつものように、皆さんはコーダーと開発者の最高のグループです。私は皆さんから多くのことを学び、皆さんの助けに感謝しています。ばかげた間違いはすべて私自身のものですが、その専門性についてはご容赦ください。
よろしく、 GeekyOmega