0

私の友人と私は、文字通りおもちゃのアプリをプログラミングすることで、自分たちでAndroidを教えています。加速度計を使った簡単なゲームを作りました。ゲームはボールを使った迷路ゲームです。加速度計を使用して動きを検出し、タイル検出を使用してボールがパス上にあるか壁に当たったかを判断します。

ただし、加速度計を使用したタイミングサービスも構築したいと考えています。このタイミングサービスは、ユーザーが加速度計を使用してアイドル状態になっていることを判断し(10秒など)、警告を発してからゲームをオフにします。つまり、アクティビティを強制終了します。

だから私が今していることは、ウィジェット上でゲームが実行されてから10秒以内にメッセージをスローできるかどうかを確認することです。私はこれをここにあるコードに正確に基づいています:

上記のチュートリアルにあるコードを、以下のビューで次のように実装しました。TimingServiceというメソッドを作成し、toyappViewで呼び出しました。

public void timingService(Context context, Activity activity){
    // get a Calendar object with current time
     Calendar cal = Calendar.getInstance();

 // add 10 seconds to the calendar object
 cal.add(Calendar.SECOND, 10);
 Intent intent = new Intent(context, AlarmReciever.class);
 intent.putExtra("alarm_message", "This is the alarm message");

 // 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);


}

アラームが鳴ったときに呼び出す必要のあるクラスは次のとおりです。

package com.example.toyapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;



public class AlarmReciever extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        try{
            Bundle bundle = intent.getExtras();
            String message = bundle.getString("alarm message");
            Toast.makeText(context, message, Toast.LENGTH_LONG).show();

        }catch(Exception e){
            Toast.makeText(context, "There was an error somewhere", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }

    }

}

ここの後、私は再び立ち往生します。チュートリアルのAlarmRecieverが呼び出されることはありません。なんで?エミュレーターでデバッグを実行しましたが、AlarmRecieverには入りません。私に関する限り、このゲームは10秒間実行してから、AlarmRecieverを呼び出して、widgitにメッセージを表示する必要があります。右?私の問題はam.setにあると思いますか?しかし、理由はわかりません。

いつものように、今しばらくお待ちいただきますようお願いいたします。私はアンドロイドでおもちゃのアプリを書く方法を自分自身に教えているので、あなたのコメントと洞察に感謝します。これは他の人にはばかげているように見えるかもしれませんが、私はすでにこれに多くのことを考えました。ですから、他の人が提供しなければならない助けをいただければ幸いです。あなたがその専門性について私を失望させてくれることを願っています。また、風邪を引いています。このアラームは加速度計用に変更されるため、これがスタックオーバーフローに関する他の問題と重複するとは思わない。トーストメッセージの作成からゲームの終了に変更します。

よろしく、GeekyOmega

PS-いくつかの同様の問題がありますが、私のクラスが呼び出されない理由に対処するものは何も見つかりませんでした。私も風邪がひどいので、その専門性をお任せください。私はしようとしています。:-)

4

1 に答える 1

1

AlarmManagerの使用をお勧めします。onSensorChanged(...)が呼び出されるたびに、10秒でゲームを終了するアラームをリセットします。

于 2012-12-07T21:12:03.733 に答える