2

で繰り返しイベントを設定するには、次のコードを使用しますAlarmManager

mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
    PERIOD, getPendingIntent(time));

レシーバーのコード:

public class NotificationsReceiver extends BroadcastReceiver {
    public static final String NOTIFICATION_INFO="notification_info";

    @Override
    public void onReceive(Context context, Intent intent) {
       playSound(context);
       Intent i=new Intent(context, MainActivity.class);
       i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       context.startActivity(i);
    }

    private void playSound(Context context) {
        Uri notification=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        RingtoneManager.getRingtone(context, notification).play();
    }
}

いくつかの問題があります。イベントが発生したときに音楽を再生する必要がありますが、デバイスがスリープ状態の場合、信号が聞こえません! しかし、デバイスを起動すると音楽が聞こえます。どうすれば修正できますか?

4

1 に答える 1

1

これを行う必要がある場合は、次のクラスを作成します。

import android.content.Context;
import android.os.PowerManager;

public abstract class WakeLocker {
    private static PowerManager.WakeLock wakeLock;

    public static void acquire(Context context) {
        if (wakeLock != null) wakeLock.release();

        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
                PowerManager.ACQUIRE_CAUSES_WAKEUP |
                PowerManager.ON_AFTER_RELEASE, "WakeLock");
        wakeLock.acquire();
    }

    public static void release() {
        if (wakeLock != null) wakeLock.release(); wakeLock = null;
    }
}

その後、電話をかけて電話をウェイクアップできますが、アクションが終了WakeLocker.acquire(getApplicationContext());したら電話することを忘れないでください。WakeLocker.release();

また、マニフェストに次のアクセス許可を追加します。<uses-permission android:name="android.permission.WAKE_LOCK" />

この助けを願っています。

于 2013-03-28T08:38:19.187 に答える