【问题标题】:Wake Lock not working properly唤醒锁无法正常工作
【发布时间】:2015-01-12 13:52:36
【问题描述】:

如果我的英语写得不好,我提前道歉。 我正在编写一个简单的任务应用程序,它会在特定时间提醒我。

下面我用 AlarmManager 设置闹钟:

private static void setAlarm(Context context, Calendar calendar,
        PendingIntent pIntent) {
    AlarmManager alarmManager = (AlarmManager) context
        .getSystemService(Context.ALARM_SERVICE);
    if (android.os.Build.VERSION.SDK_INT >= 
            android.os.Build.VERSION_CODES.KITKAT) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), pIntent);
    } else {
        alarmManager.set(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), pIntent);
    }
}

然后是 AlarmManagerHelper :

public class AlarmManagerHelper extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        String title = intent.getStringExtra("Title");
        int hour = intent.getIntExtra("Hour", 0);
        int min = intent.getIntExtra("Minute", 0);
        String alarmTone = intent.getStringExtra("AlarmTone");
        Intent i = new Intent();
        i.setClassName("com.example.tasks",
            "com.example.tasks.AlarmScreenActivity");
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.putExtra("Title", title);
        i.putExtra("Hour", hour);
        i.putExtra("Minute", min);
        i.putExtra("AlarmTone", alarmTone);
        context.startActivity(i);
    }
}

而 AlarmScreenActivity 是:

public class AlarmScreenActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // get intent
        pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
        wl.acquire();
        mPlayer = new MediaPlayer();
        try {
            if (task_Tone != null && !task_Tone.equals("")) {
                android.net.Uri toneUri = android.net.Uri.parse(task_Tone);
                if (toneUri != null) {
                    mPlayer.setDataSource(this, toneUri);
                    mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                    mPlayer.setLooping(true);
                    mPlayer.prepare();
                    mPlayer.start();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // some code
    public void onClickDissmis(View view) {
        mPlayer.stop();
        finish();
    }

    protected void onDestroy() {
        super.onDestroy();
        wl.release();
    }
}

然后使用 AlarmManagerHelper 和 AlarmScreenActivity 显示它。

我的问题是: 在应该唤醒和响铃的特定时间不做int,所以当我按下电源按钮时,打开屏幕是工作???! (当处于调试模式并且设备连接到系统时正常工作) 我希望能完美地描述我的问题。

【问题讨论】:

    标签: android android-wake-lock


    【解决方案1】:

    我不明白你的问题,确切地说。不过,我可以说,Android 只保证 it 在传递广播时持有唤醒锁。您的代码在接收器接收广播和您抓住唤醒锁之间留有相当长的时间。在该时间间隔内,没有什么可以阻止设备重新进入睡眠状态。

    【讨论】:

    • 感谢您的回答...在该 AlarmScreenActivity 中的按钮中单击如下:'public void onClickDissmis(View view){ mPlayer.stop();结束(); }'我认为我应该把代码放在下面
    • 我编辑了我的帖子...希望描述得更好...抱歉。
    【解决方案2】:

    AlarmManagerHelper.onReceive 运行时,系统持有一个不会失败的锁(由于警报管理器)。但是在context.startActivity(i); 和活动开始之间,系统再次进入睡眠状态。您需要使用 WakefulBroadcastReceiver(请参阅BroadcastReceiver Vs WakefulBroadcastReceiver)或(这就是我使用的)WakefulIntentService

    在任何情况下,您都需要启动服务并从那里开始您的活动。对于 WakefulIntentService 模式,请参阅我的回答 PowerManager.PARTIAL_WAKE_LOCK android 和那里的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多