android - 发送短信时查看确认充值账单对话框

标签 android sms android-billing

在以下代码中使用短信管理器发送短信:

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

在下面的对话框中,当设备 Android 版本 4.3 或 4.4 时我收到它。 单击“发送”或“取消”如何检测状态?

enter image description here

最佳答案

只要阅读相应的源码就会发现,点击发送或取消是无法检测到状态的。

“向高级短信短代码(或可疑的高级短信号码)发送消息的默认行为是要求用户确认。允许用户将默认策略(“记住此选择”复选框)设置为始终/将来永远不允许该应用程序向高级短代码发送短信。可以通过应用程序信息屏幕中的“设置”应用程序更改该策略。” See here for details

该对话框定义于 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);
}

当您单击对话框上的“发送”或“取消”按钮时,它将向其线程中的处理程序发送一条消息。但似乎没有办法捕获点击事件。

关于android - 发送短信时查看确认充值账单对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21982319/

相关文章:

Android:如何检查用户是否有 Activity 订阅

in-app-purchase - 是否有必要从 "Google Play Billing with AIDL"迁移到 "Google Play Billing Library"?

android - 将 android 屏幕转换为 Jpeg 图像

Android ListView 项目在选择时闪烁

android - 代号一 : I want to implement Automatic reading functionality

ios - Twilio 函数错误 20429 - 太多请求多条短信

android - dex格式上还不清楚

java - 如何防止碰撞后 body 移动 [Box2D] [AndEngine]

r - 为什么在 R 中使用 plivo 发送短信失败?

android - Google 结算内部测试 : Test Card not showing