Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 即使我按下停止按钮,闹钟也会一直响_Android_Ringtonemanager - Fatal编程技术网

Android 即使我按下停止按钮,闹钟也会一直响

Android 即使我按下停止按钮,闹钟也会一直响,android,ringtonemanager,Android,Ringtonemanager,我做了一个闹钟,它几乎正常工作,只是它从不停止。 即使我按下了“停止”按钮,闹钟也会一直响 我有两个按钮,一个id为setthealarm,另一个id为stopthealarm 在公共类main活动中I定义TimePicker、pendingent和AlarmManager public class activity_mainnew extends Activity { TimePicker alarmTimePicker; PendingIntent pendingIntent;

我做了一个闹钟,它几乎正常工作,只是它从不停止。 即使我按下了“停止”按钮,闹钟也会一直响

我有两个按钮,一个id为setthealarm,另一个id为stopthealarm

在公共类
main活动中
I定义
TimePicker
pendingent
AlarmManager

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);
}
单击一次设置时间

@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);
    }
@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();
}
并在单击时停止报警

@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);
    }
@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();
    }
}

你知道为什么铃声没有停止吗?

这可能是因为你没有在这个问题中粘贴代码,但我实际上没有看到将stopthealarm连接到单击按钮的代码。您确定stopthealarm函数会触发吗

你这样做是为了setthealarm,但不是为了stopthealarm


善意的问候

这可能是因为您没有粘贴此问题中的代码,但我实际上没有看到将stopthealarm连接到单击按钮的代码。您确定stopthealarm函数会触发吗

你这样做是为了setthealarm,但不是为了stopthealarm


亲切问候

要正确取消您的报警,您需要让挂起的帐篷使用
标志\u UPDATE\u CURRENT
标志

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, AlarmReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
在AlarmReceiver类的开头,在
onReceive()
之前添加请求代码行:

要在单击停止按钮时停止铃声上的铃声
stop()

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

要正确取消警报,您需要让挂起的帐篷使用
标志\u UPDATE\u CURRENT
标志

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, AlarmReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
在AlarmReceiver类的开头,在
onReceive()
之前添加请求代码行:

要在单击停止按钮时停止铃声上的铃声
stop()

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

我忘记写了。。按钮功能正在工作,但他们忘了写。。按钮功能在两个方面都起作用。您是否尝试过
ringtone.stop()何时停止?您是否尝试过
铃声.stop()