звонить в будильник даже в беззвучном режиме, когда получено ключевое слово sms для android

Что на самом деле делает alarmmanager? Это тот, который действительно воспроизводит звук или просто какой-то триггер? Я пытаюсь создать приложение, которое будет воспроизводить сигнал тревоги даже в беззвучном режиме при получении смс с определенным ключевым словом, а затем отображать диалоговое окно предупреждения, которое предоставит пользователю кнопки, которые нужно нажать, чтобы ответить на сообщение. Я изучал и находил рабочие примеры в Интернете около недели, но ни один из них даже не включил будильник. к тому же примеры всегда разные и запутанные, что еще больше меня расстраивает. Я новичок в разработке приложений для Android. пожалуйста, помогите мне .. спасибо заранее. вот мой код

public class EAlarmReceiver extends BroadcastReceiver {

public static String sender;
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Bundle bundle = intent.getExtras(); 
    Object[] pdusObj = (Object[]) bundle.get("pdus"); 
    SmsMessage[] messages = new SmsMessage[pdusObj.length]; 
    for (int i = 0; i<pdusObj.length; i++) 
    { 
            messages[i] = SmsMessage.createFromPdu ((byte[]) 
            pdusObj[i]); 
            sender = messages[i].getOriginatingAddress();
    } 

    for (SmsMessage msg : messages) {
        if (msg.getMessageBody().contains("alert")) {
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND, 5);
            Intent i = new Intent(context, ReceiverInterface.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context,
                12345, i, PendingIntent.FLAG_CANCEL_CURRENT);
            AlarmManager am = (AlarmManager)context.getSystemService(Activity.ALARM_SERVICE);
            am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                    pendingIntent);
        }//end if
    }//end for

}// end onreceive
}

Извините, если код был действительно грязным

public class ReceiverInterface extends Activity{
final Context context = this;
String my_password = "1234";
AlertDialog.Builder alertDialogBuilder;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.receiverinterface);

   alertDialogBuilder = new AlertDialog.Builder(
            context);
    alertDialogBuilder.setTitle("Emergency signal received");

            alertDialogBuilder
            .setMessage("Click availability status")
            .setCancelable(false)
            .setPositiveButton("available",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    dispatch_available_action();
                    Toast.makeText(getApplicationContext(), "available", Toast.LENGTH_LONG).show();
                }
              })
            .setNegativeButton("not available",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, just close
                    // the dialog box and do nothing
                    dialog.cancel();
                }
            });

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

            // show it
            alertDialog.show();

}// end oncreate()


public void dispatch_available_action(){
    final EditText password_input = new EditText(this); // create an text input field
    password_input.setHint("Enter Password"); // put a hint in it
    password_input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); // change it to password type

    alertDialogBuilder = new AlertDialog.Builder(
            context);
    AlertDialog.Builder alertDialog = new Builder(this); // create an alert box
    alertDialog.setTitle("Enter Password"); // set the title
    alertDialog.setView(password_input);  // insert the password text field in the alert box
    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { // define the 'OK' button
        public void onClick(DialogInterface dialog, int which) {
             String entered_password = password_input.getText().toString();
             if (entered_password.equals(my_password)) {
                 alertDialogBuilder.setTitle("Send status");

                 alertDialogBuilder.setCancelable(false);
                 alertDialogBuilder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {

                            try {

                            String message = "available";
                            SmsManager smsManager = SmsManager.getDefault();
                            EAlarmReceiver eReceiver = new EAlarmReceiver();
                            String eSender = eReceiver.sender;
                            Toast.makeText(getApplicationContext(), eSender,
                                    Toast.LENGTH_LONG).show();
                            smsManager.sendTextMessage(eSender, null, message, null, null);

                            } catch (Exception e) {
                                Toast.makeText(getApplicationContext(),
                                "SMS failed, please try again later!",
                                Toast.LENGTH_LONG).show();
                                e.printStackTrace();
                            }
                        }
                      });
                    alertDialogBuilder.setNegativeButton("No",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // if this button is clicked, just close
                            // the dialog box and do nothing
                            dialog.cancel();
                        }
                    });
                    // create alert dialog
                    AlertDialog alertDialog = alertDialogBuilder.create();

                    // show it
                    alertDialog.show();

             } else {
                 Toast.makeText(getApplicationContext(),
                        "Wrong password!",
                        Toast.LENGTH_LONG).show();
             }
        } 
    });
    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { // define the 'Cancel' button
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        } 
    });
    alertDialog.show(); // show the alert box
}
}

Диалог предупреждений работает нормально, я просто не могу заставить будильник звенеть, не говоря уже о том, чтобы сделать это в беззвучном режиме.


person Tokuchi Toua    schedule 27.11.2012    source источник
comment
Чтобы позвонить на устройство при получении смс с определенным ключевым словом, посетите ‹stackoverflow.com/questions/17720965/  -  person Ashok R    schedule 21.05.2014
comment
возможный дубликат выполнить действие при получении определенного текста в SMS на Android   -  person Howli    schedule 31.05.2014


Ответы (1)


Все, что делает AlarmManager, — это выполняет PendingIntent в заданное время с необязательным повторить. Это не имеет ничего общего с аудиопотоками. Это руководство, вероятно, поможет вам воспроизвести звук при получении PendingIntent.

person A--C    schedule 27.11.2012