1

目覚まし時計を作りましたが、止まらないことを除けばほぼ正常に動作します。ストップアラームボタンを押しても鳴り続けます。

2 つのボタンがあります。1 つは ID setthealarmで、もう 1 つは ID stopthealarmです。

public クラスMainActivityで を定義しTimePickerPendingIntentAlarmManager

public class activity_mainnew extends Activity {
TimePicker alarmTimePicker;
    PendingIntent pendingIntent;
    AlarmManager alarmManager;



@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainnew);
alarmTimePicker = (TimePicker) findViewById(R.id.timePicker);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
}

時間の設定onClick:

@RequiresApi(api = Build.VERSION_CODES.M)
    public void setthealarm(View view){
        Toast.makeText(activity_mainnew.this, "ALARM ON", Toast.LENGTH_SHORT).show();
        long time;

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour());
        calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute());

        Intent intent = new Intent(this, AlarmReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

        alarmTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);

        time = (calendar.getTimeInMillis()-(calendar.getTimeInMillis()%60000));
        if(System.currentTimeMillis()>time)
        {
            if (calendar.AM_PM == 0)
                time = time + (1000*60*60*12);
            else
                time = time + (1000*60*60*24);
        }
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, 10000, pendingIntent);
    }

そしてアラームを停止しonClickます:

@RequiresApi(api = Build.VERSION_CODES.M)
public void stopthealarm(View view){
    Toast.makeText(activity_mainnew.this, "ALARM OFF", Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
    pendingIntent.cancel();
}

私の AlarmReceiver クラスには、次のものがあります。

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);

        if (alarmUri == null) {
        alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        }

        Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
        ringtone.play();
    }
}

着信音が止まらない理由を教えてください。

4

2 に答える 2

0

この質問にコードを貼り付けていないことが原因かもしれませんが、stopthealarmを onclick ボタンに接続するコードが実際には表示されません。stopthealarm関数がトリガーされますか?

setthealarmに対しては行いますが、stopthealarmに対しては行いませ

setthetime onclick:

敬具

于 2016-12-29T00:19:07.697 に答える
0

アラームを適切にキャンセルするには、PendingIntent にFLAG_UPDATE_CURRENTフラグを使用させる必要があります。

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, AlarmReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

また、 AlarmReceiver クラスの最初の の前にリクエスト コード行を追加しますonReceive()

public static final int REQUEST_CODE = 222;

stop()停止ボタンがクリックされたときに着信音で呼び出し中の通話を停止するには:

Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
ringtone.stop();
于 2016-12-29T01:27:33.603 に答える