Просмотр диалогового окна подтверждения пополнения счета при отправке SMS

В следующем коде для отправки SMS с помощью SMS Manager:

SmsManager smsManager = SmsManager.getDefault();                                                      
smsManager.sendTextMessage(phoneNo, null,message, null, null);

В приведенном ниже диалоговом окне я получаю его, когда устройство Android версии 4.3 или 4.4. как определить статус, если нажать «Отправить» или «Отмена»?

введите здесь описание изображения


person Mohammed Saleem    schedule 24.02.2014    source источник
comment
разве это не автоматически отправляет сообщение, если вы нажмете «Отправить»?   -  person Daksh Shah    schedule 24.02.2014
comment
да, это не автоматически, но как я могу определить, нажмите ли кнопку «Отправить», чтобы узнать, отправить ли SMS или отменить, чтобы скрыть это диалоговое окно   -  person Mohammed Saleem    schedule 24.02.2014
comment
Этот диалог написан вами? или это происходит автоматически?   -  person Daksh Shah    schedule 24.02.2014
comment
это происходит автоматически   -  person Mohammed Saleem    schedule 24.02.2014
comment
stackoverflow.com/questions/10763986 / это чем-нибудь поможет?   -  person Daksh Shah    schedule 24.02.2014
comment
ты решил проблему?   -  person MatheusJardimB    schedule 06.05.2014


Ответы (1)


Вы обнаружите, что не можете определить статус, если нажмете «Отправить» или «Отменить», пока вы читаете соответствующий исходный код.

«Поведение по умолчанию для отправки сообщения на короткий SMS-код премиум-класса (или подозреваемый номер премиум-SMS) заключается в том, чтобы запросить у пользователя подтверждение. Разрешить пользователю установить политику по умолчанию (флажок «запомнить этот выбор»), чтобы всегда / никогда не разрешать приложение для отправки SMS на премиальные короткие номера в будущем. Политику можно изменить в приложении «Настройки» на экране информации о приложении». Подробности см. здесь

Диалог определен в src/java/com/android/internal/telephony/SMSDispatcher.java.

 /**
* Post an alert when SMS needs confirmation due to excessive usage.
* @param tracker an SmsTracker for the current message.
*/
protected void handleReachSentLimit(SmsTracker tracker) {
    if (denyIfQueueLimitReached(tracker)) {
        return; // queue limit reached; error was returned to caller
    }
    CharSequence appLabel = getAppLabel(tracker.mAppInfo.packageName);
    Resources r = Resources.getSystem();
    Spanned messageText = Html.fromHtml(r.getString(R.string.sms_control_message, appLabel));
    ConfirmDialogListener listener = new ConfirmDialogListener(tracker);
    AlertDialog d = new AlertDialog.Builder(mContext)
           .setTitle(R.string.sms_control_title)
           .setIcon(R.drawable.stat_sys_warning)
           .setMessage(messageText)
           .setPositiveButton(r.getString(R.string.sms_control_yes), listener)
           .setNegativeButton(r.getString(R.string.sms_control_no), listener)
           .setOnCancelListener(listener)
           .create();
   d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
   d.show();
  }

И обратные вызовы отрицательной и положительной кнопки:

 /**
* Dialog listener for SMS confirmation dialog.
*/
private final class ConfirmDialogListener
implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener,
CompoundButton.OnCheckedChangeListener {
    private final SmsTracker mTracker;
    private Button mPositiveButton;
    private Button mNegativeButton;
    private boolean mRememberChoice; // default is unchecked
    ConfirmDialogListener(SmsTracker tracker) {
       mTracker = tracker;
    }
    void setPositiveButton(Button button) {
       mPositiveButton = button;
    }
    void setNegativeButton(Button button) {
      mNegativeButton = button;
    }
@Override
    public void onClick(DialogInterface dialog, int which) {
// Always set the SMS permission so that Settings will show a permission setting
// for the app (it won't be shown until after the app tries to send to a short code).
      int newSmsPermission = SmsUsageMonitor.PREMIUM_SMS_PERMISSION_ASK_USER;
      if (which == DialogInterface.BUTTON_POSITIVE) {
         Log.d(TAG, "CONFIRM sending SMS");
// XXX this is lossy- apps can have more than one signature
         EventLog.writeEvent(EventLogTags.SMS_SENT_BY_USER,
         mTracker.mAppInfo.signatures[0].toCharsString());
         sendMessage(obtainMessage(EVENT_SEND_CONFIRMED_SMS, mTracker));
         if (mRememberChoice) {
             newSmsPermission = SmsUsageMonitor.PREMIUM_SMS_PERMISSION_ALWAYS_ALLOW;
         }
         } else if (which == DialogInterface.BUTTON_NEGATIVE) {
             Log.d(TAG, "DENY sending SMS");
// XXX this is lossy- apps can have more than one signature
        EventLog.writeEvent(EventLogTags.SMS_DENIED_BY_USER,
            mTracker.mAppInfo.signatures[0].toCharsString());
            sendMessage(obtainMessage(EVENT_STOP_SENDING, mTracker));
        if (mRememberChoice) {
            newSmsPermission = SmsUsageMonitor.PREMIUM_SMS_PERMISSION_NEVER_ALLOW;
        }
    }
       setPremiumSmsPermission(mTracker.mAppInfo.packageName, newSmsPermission);
}

Когда вы нажимаете кнопку «Отправить» или «Отмена» в диалоговом окне, он отправит сообщение своему обработчику в своем потоке. Но кажется, что у вас нет возможности зафиксировать событие щелчка.

person Jansen    schedule 05.11.2014