无法在不让线程进入睡眠状态下设置警报

时间:2014-09-15 17:36:06

标签: android android-intent android-activity

我有一个包含两个活动的应用:第一个活动有一个发送按钮。按下发送时显示第二个活动。

作为我希望发送的练习,在开始第二项活动之前,还会在手机上设置闹钟(例如,上午5:30)。这是按下按钮时运行的方法:

public void sendMessage(View view) throws InterruptedException {
    // Make alarm
    Intent i = new Intent(AlarmClock.ACTION_SET_ALARM)
    .putExtra(AlarmClock.EXTRA_HOUR, 5)
    .putExtra(AlarmClock.EXTRA_MINUTES, 30);
    startActivity(i);
    //Thread.sleep(1000);

    // Start second activity
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    startActivity(intent);
}

我从http://developer.android.com/guide/components/intents-common.html#Clock

获取了闹钟设置代码

当我运行上述方法时,就好像“发出警报”一样。代码不在那里。按发送只会启动第二个活动,并且时钟应用程序中没有设置警报。

当我在Thread.sleep(1000)调用中发表评论时,该方法按预期运行。按下发送会使时钟应用程序在我的应用程序的第二个活动进入前台之前在屏幕上快速闪烁。系统消息显示"警报已设置为早上5:30",我可以通过进入时钟应用程序验证这一点。

Thread.sleep(1000)调用有什么区别?当我将它改为睡眠状态仅10毫秒时,我得到的结果与Thread.sleep调用完全没有相同。

1 个答案:

答案 0 :(得分:0)

不是阻止UI线程(在我看来有点疯狂:P),使用内置方法onActivityResult启动警报意图,然后捕获响应以启动下一个Activity。 / p>

public class AlarmActivity extends Activity {

    private static final int REQUEST_CODE = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.alarm_activity);

        findViewById(R.id.bt_alarm).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent i = new Intent(AlarmClock.ACTION_SET_ALARM)
                        .putExtra(AlarmClock.EXTRA_HOUR, 5)
                        .putExtra(AlarmClock.EXTRA_MINUTES, 30);
                startActivityForResult(i, REQUEST_CODE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == REQUEST_CODE) {
            startActivity(new Intent(AlarmActivity.this, DisplayMessageActivity.class));
        }
    }
}