java - android设置alarm和ringtone没有任何效果。
迷茫
迷茫 2017-04-17 17:45:59
0
1
291

在mainactivity里设置了pendingintent,设置好闹钟的启动时间和铃声,由此打开一个新的activity,在这个新的activity中执行铃声的播放和闹钟提醒,但是没有任何反应

public class AlarmSetActivity extends Activity {

    private Context context;
    private AlarmManager manager;
    @ViewInject(R.id.activity_content_tv)
    private TextView title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm_set);
        ViewUtils.inject(this);
        context = this;
        title.setText("闹钟设置 ");
        manager = (AlarmManager) getSystemService(ALARM_SERVICE);
    }

    @OnClick({ R.id.time_set_btn, R.id.voice_set_btn, R.id.back_btn })
    public void onClick(View view) {
        switch (view.getId()) {
        case R.id.time_set_btn:
            setTime();
            break;
        case R.id.back_btn:
            onBackPressed();
            break;
        case R.id.voice_set_btn:
            setAlarmRingtone();
            break;
        default:
            break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case 1:
            if (resultCode == RESULT_OK) {
                Uri uri = data
                        .getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
                RingtoneManager.setActualDefaultRingtoneUri(context,
                        RingtoneManager.TYPE_RINGTONE, uri);
            }
            break;

        default:
            break;
        }
    }

    /**
     * 闹钟的时间选择
     */
    private void setTime() {
        // 当前设备上的系统时间
        Calendar cal = Calendar.getInstance();
        // 弹出设置时间的窗口
        new TimePickerDialog(this, new OnTimeSetListener() {

            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                Intent intent = new Intent(context, AlarmNotifyActivity.class);
                PendingIntent pi = PendingIntent.getActivity(context, 0,
                        intent, 0);
                Calendar setCal = Calendar.getInstance();
                setCal.set(Calendar.HOUR_OF_DAY, hourOfDay);
                setCal.set(Calendar.MINUTE, minute);
                // 设置AlarmManager将在Calendar对应的时间启动指定组件
                // 将在指定的时间(24h)之后再次启动
                manager.setRepeating(AlarmManager.RTC_WAKEUP,
                        setCal.getTimeInMillis(), 1000 * 60 * 60 * 24, pi);
                Toast.makeText(context, "闹铃设置成功", Toast.LENGTH_SHORT).show();
            }
        }, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true)
                .show();
    }

    /**
     * 选择闹钟铃声
     */
    private void setAlarmRingtone() {
        Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,
                RingtoneManager.TYPE_ALARM);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "请选择闹钟铃声");
        startActivityForResult(intent, 1);
    }
}

第二个activity

public class AlarmNotifyActivity extends Activity {

    private MediaPlayer player;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        player = MediaPlayer.create(this, RingtoneManager
                .getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM));
        player.setLooping(true);
        player.start();
        new AlertDialog.Builder(AlarmNotifyActivity.this).setTitle("测量提醒")  
        .setMessage("请起床进行体温测量!")  
        .setPositiveButton("好哒~~", new OnClickListener() {  

            @Override  
            public void onClick(DialogInterface dialog, int which) {  
                // 停止音乐播放  
                player.stop();  
                // 结束该Activity  
                AlarmNotifyActivity.this.finish();  
            }  
        }).show();  
    }
}
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

모든 응답(1)
大家讲道理

24시간이 지났을 수도 있습니다. 시스템에 의해 프로그램 프로세스가 종료되어 당연히 아무런 반응도 없을 수도 있습니다. 활동만 있으므로 먼저 시간을 더 짧게(예: 1~2분) 설정할 수 있으므로 활동을 전경에서 계속 실행하고 1~2분 이내에 소멸되지 않도록 하는 것이 가장 좋습니다. 프로그램의 성능이 올바른지 아닌지. 1~2분 후에 알람이 울리면 프로그램 프로세스가 오랫동안 움직이지 않아 시스템에 의해 종료되는 것을 방지하는 방법을 고려해야 합니다. 두 가지 활동에만 의존하여 오랫동안 활동을 유지하는 것은 신뢰할 수 없습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿