0

先生,我如何提示停止警报响起然后在其他班级启动警报对话框?此代码总是强制关闭。如果我删除停止时钟的提示部分,闹钟将不会停止响铃,并且警报对话框仅显示一次。如果它收到另一条消息,它不会再次触发警报对话框。请帮我。提前感谢您的帮助

for (SmsMessage msg : messages) {
        if (msg.getMessageBody().contains("alert")) {

            Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
             if(alert == null){
                 // alert is null, using backup
                 alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                 if(alert == null){  
                     // alert backup is null, using 2nd backup
                     alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);               
                 }
             }
             Ringtone r = RingtoneManager.getRingtone(context.getApplicationContext(), alert);
             AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
             int maxVolumeAlarm = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);

             audioManager.setStreamVolume(AudioManager.STREAM_ALARM, maxVolumeAlarm,AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);

             r.play();

//prompt
alertDialogBuilder = new AlertDialog.Builder(
            context);
    alertDialogBuilder.setTitle("Alarm Received");

            alertDialogBuilder
            .setMessage("Stop alarm")
            .setCancelable(false)
            .setPositiveButton("OK",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    r.stop();
                    Toast.makeText(getApplicationContext(), "alarm stopped", Toast.LENGTH_LONG).show();
                }
              });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();
                Toast.makeText(context.getApplicationContext(), "alarm started", Toast.LENGTH_LONG).show();

//open alertdialog in other activity        
Intent openInterface = new Intent("proj.receiver.RECEIVERINTERFACE");
            openInterface.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(openInterface);

        }//end if
    }//end for
4

1 回答 1

0

我完全不理解你,但根据我的理解:

  1. 对话框中的“r.stop()”是使警报停止的原因。因此,如果您不希望闹钟停止,请将其从那里移开。

  2. 只有当“消息”是“警报”(如果)时,对话框才会打开并且警报才会响起,因此如果您希望它发生在不同的消息中,您必须创建自己的“if-elseif”。

  3. 如果您想在另一条不同的消息中停止警报(所以第 1 点和第 2 点),您必须将“Ringtone r =....”移到“if”句子之外和/或取决于您想要做什么,之前'for' 语句。

--

要在另一个 Activity 中执行此操作,请使用 Ringtone 变量创建一个静态类,并在创建铃声时将 var 传递给静态类以存储它。然后当新 Activity 打开时,从 StaticClass 中获取 var 以停止响铃。希望能帮助到你。

于 2012-12-04T10:05:49.107 回答