2

私はアンドロイドを初めて使用します。ユーザーが設定した時間に到達したときにアラームを再生したいです。アラームアクティビティがあります。コードは次のとおりです。

Intent intent = new Intent(this, AlarmReciever.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,
    12345, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, (cal.getTimeInMillis()/1000)+(t*60*60),
        pendingIntent);//t is the time which is contained in database 

私のアラームレシーバーのアクティビティは次のようになります。

public class AlarmReciever extends Activity {

    private MediaPlayer mMediaPlayer;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.alarmrecieve);

        Button stopAlarm = (Button) findViewById(R.id.stopAlarm);
        stopAlarm.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                mMediaPlayer.stop();
                finish();
                return false;
            }
        });
        playSound(this, getAlarmUri());
    }

    private void playSound(Context context, Uri alert) {
        mMediaPlayer = new MediaPlayer();
        try {
            mMediaPlayer.setDataSource(context, alert);
            final AudioManager audioManager = (AudioManager) context
                    .getSystemService(Context.AUDIO_SERVICE);
            if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
            }
        } catch (IOException e) {
            System.out.println("OOPS");
        }
    }

        //Get an alarm sound. Try for an alarm. If none set, try notification,
        //Otherwise, ringtone.
    private Uri getAlarmUri() {
        Uri alert = RingtoneManager
                .getDefaultUri(RingtoneManager.TYPE_ALARM);
        if (alert == null) {
            alert = RingtoneManager
                    .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            if (alert == null) {
                alert = RingtoneManager
                        .getDefaultUri(RingtoneManager.TYPE_RINGTONE);
            }
        }
        return alert;
    }
}

私の問題は、ユーザーが時間を入力すると、アラーム アクティビティがバックグラウンドで実行される必要があることです。時間になると、アラームが開始する必要があります。サービスについて聞いたことがありますが、プロジェクトでの実装については知りません。よろしくお願いします

4

1 に答える 1

2

はい、できますServiceここ を参照してください。そして、保留中の意図を介してサービスを開始します。このような活動の代わりに

PendingIntent pendingIntent = PendingIntent.getService(this,12345, intent,PendingIntent.FLAG_CANCEL_CURRENT);

例:

Intent myIntent = new Intent(Add.this, MyAlarmService.class);
        PendingIntent   pendingIntent = PendingIntent.getService(this, 12345, myIntent, 0);

Service クラスは次のようになります。

import java.util.Calendar;

import android.app.Service;
import android.content.Intent;
import android.database.Cursor;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

    public class MyAlarmService extends Service {


    @Override

    public void onCreate() {

    // TODO Auto-generated method stub

    //Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();

    }

   @Override

    public IBinder onBind(Intent intent) {

    // TODO Auto-generated method stub

    Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();

    return null;

    }
     @Override

    public void onDestroy() {

    // TODO Auto-generated method stub

    super.onDestroy();

    Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();

    }
    @Override

    public void onStart(Intent intent, int startId) {

    // TODO Auto-generated method stub

    super.onStart(intent, startId);

    Intent dialogIntent = new Intent(getBaseContext(),AlarmReciever.class);
    dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    getApplication().startActivity(dialogIntent);

    }

    }
    @Override

    public boolean onUnbind(Intent intent) {

    // TODO Auto-generated method stub

    Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show();

    return super.onUnbind(intent);

    }        

    }

そしてサービス中、あなたの活動を呼び出しますAlarmReciever

于 2012-10-29T11:46:56.897 に答える