发送短信前,显示确认对话框 [英] Display a confirmation dialog before sending SMS

查看:208
本文介绍了发送短信前,显示确认对话框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的Andr​​oid,我已经完全束缚我的应用程序,但我想改变现在它。

当有人发送短信,我想显示发送短信,要求发送或不显示确认对话框。我必须做出一个通用类的,我已经写了源$ C ​​$ C,它工作正常,但如果用户不点击Yes或取消对话框出去,但我希望它仍然显示,直到用户不点击在Yes或取消按钮。

怎么能解决呢?

 公共无效send_SMS(最后弦乐消息)
    {
    尝试{


        AlertDialog.Builder对话框=新AlertDialog.Builder(CTX);
        dialog.setTitle(发送短信);
        dialog.setMessage(有U确定要发送短信);
        dialog.setCancelable(真正的);
        dialog.setPositiveButton(是,新DialogInterface.OnClickListener(){

            @覆盖
            公共无效的onClick(DialogInterface对话,诠释它){
                // TODO自动生成方法存根
                sentpi = PendingIntent.getBroadcast(CTX,0,新意图(SENT),0);
                delpi = PendingIntent.getBroadcast(CTX,0,新的意向(送到),0); //
                串的id = message.substring(3,4);
                INT MSGID = Integer.valueOf(ID,16).intValue();

                如果(dba.IsConOpenOrClose()==假)
                    dba.Open();
                如果(ConstantClass.SelectCord.equals(所有)){
                    如果(MSGID == 3 || MSGID == 9){
                    DEVID = message.substring(4,20);
                    ConstantClass.CurrentId = DEVID;
                    STRSQL =新的String(SELECT * FROM+ ConstantClass.dbName [2] +WHERE+ DataBaseAdapter.Key_DevID +=?);
                    CUR = dba.ExecuteSelect(STRSQL,DEVID);
                    如果(CUR!= NULL)
                        cur.moveToFirst();
                    INT cordId = cur.getInt(cur.getColumnIndex(DataBaseAdapter.Key_DevCoordId));
                    phoneNumber的= dba.getSendSmsMobileNo(cordId);
                    dba.prcUpdateOrClean(DEVID,1);
                    cur.close();
                    }
                }其他{
                    phoneNumber的= dba.getSendSmsMobileNo(dba.CurrentWorkingCoordinator(DataBaseAdapter.Key_SendCoord,1));
                / *********现在获得现场smsProcess更新特定设备********** /
                如果(MSGID == 3 || MSGID == 9 || MSGID == 7){
                    DEVID = message.substring(4,20);
                    如果(dba.IsConOpenOrClose()==假)
                        dba.Open();
                    ConstantClass.CurrentId = DEVID;
                    dba.prcUpdateOrClean(DEVID,1);

                }否则,如果(MSGID == 15 || MSGID == 13 || MSGID == 11 || MSGID == 1){
                    如果(dba.IsConOpenOrClose()==假)
                        dba.Open();
                    phoneNumber的= dba.getSendSmsMobileNo(dba.CurrentWorkingCoordinator(DataBaseAdapter.Key_SendCoord,1));
                    如果(phoneNumber.length()== 11){
                        pdNo = phoneNumber.substring(1,11);
                    }其他{
                        pdNo = phoneNumber.substring(0,10);
                    }
                    DEVID =000000+ pdNo;
                    ConstantClass.CurrentId = DEVID;
                    dba.prcUpdateOrClean(DEVID,1);

                }
                }
                  SmsManager的短信= SmsManager.getDefault();
                  如果(phoneNumber的!= NULL){
                      sms.sendTextMessage(phoneNumber的,空,message.toUpperCase(),sentpi,delpi);
                  }其他{
                      抛出新的显示java.lang.NullPointerException();
                  }
            }
        });
        dialog.setNegativeButton(取消,新DialogInterface.OnClickListener(){

            @覆盖
            公共无效的onClick(DialogInterface对话,诠释它){
                // TODO自动生成方法存根
                dialog.cancel();
            }
        });
        AlertDialog DLG = dialog.create();
        dlg.show();
    }赶上(的Throwable E){
        DLG =新ExceptionDialog(this.ctx,发送短信,e.getMessage());
        dlg.show();
    }
}
公众的BroadcastReceiver SMS_SEND =新的BroadcastReceiver(){
    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){
        字符串信息=发送信息;
        开关(的getResult code()){
        案例Activity.RESULT_OK:
            信息+ =短信发送全成;
            打破;
        案例SmsManager.RESULT_ERROR_GENERIC_FAILURE:
            信息+ =短信发送faild:genric faliure;
            打破;
        案例SmsManager.RESULT_ERROR_NO_SERVICE:
            信息+ =发送失败,原因是没有服务;
            打破;
        案例SmsManager.RESULT_ERROR_NULL_PDU:
            信息+ =发送失败:空P​​DU;
            打破;
        案例SmsManager.RESULT_ERROR_RADIO_OFF:
            信息+ =发送失败:无线业务关;
            打破;
        }
         Toast.makeText(CTX,信息,Toast.LENGTH_SHORT).show();
    }
};
公众的BroadcastReceiver sms_delivered =新的BroadcastReceiver(){
    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){
        字符串信息=短信交货:;
        开关(的getResult code()){
        案例Activity.RESULT_OK:
            信息+ =短信Deliverd;
            打破;
        案例Activity.RESULT_CANCELED:
            信息+ =短信未送达;
            打破;
        }
        Toast.makeText(CTX,信息,Toast.LENGTH_SHORT).show();
    }
};
公众的IntentFilter getSentIntentFilter(){
    返回新的IntentFilter(发送);
}
公众的IntentFilter getDeliveredFilter(){
    返回新的IntentFilter(送到);
}
/ *私人无效重新抛出(MyException前){
    如果(ex.nullPointerException的instanceof NullPointerException异常){

    }
}
私有类MyException扩展异常{
    公共异常NullPointerException异常;
    公共MyException(){}
    公共MyException(异常NullPointerException异常){
        this.nullPointerException = NullPointerException异常;
    }
} * /
}
 

解决方案

  dialog.setCancelable(真正的);应该像dialog.setCancelable(假);
 

这prevents警告对话框中关闭时,用户presses后退按钮:)

I am new to Android and I have bound my application completely but I wish to a change now in it.

When someone sends an sms, I want to display a confirmation dialog for sending sms asking for send or not. And I have to make a common class for that I have written the source code and it works fine but if user does not click on Yes or Cancel the dialog goes out but I wish that it will still display until user does not click on Yes or Cancel button.

How it can be solved?

public void send_SMS( final String message)
    { 
    try{


        AlertDialog.Builder dialog = new AlertDialog.Builder(ctx);
        dialog.setTitle("Send SMS");
        dialog.setMessage("Are U sure want to Send SMS");
        dialog.setCancelable(true);
        dialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                sentpi = PendingIntent.getBroadcast(ctx, 0, new Intent(SENT),0);
                delpi = PendingIntent.getBroadcast(ctx, 0, new Intent(DELIVERED), 0);//
                String id = message.substring(3, 4);
                int msgId = Integer.valueOf(id, 16).intValue();

                if(dba.IsConOpenOrClose()==false)
                    dba.Open();
                if(ConstantClass.SelectCord.equals("All")){
                    if(msgId == 3 || msgId == 9){   
                    devId = message.substring(4, 20);
                    ConstantClass.CurrentId = devId;
                    strSql = new String("SELECT * FROM "+ ConstantClass.dbName[2] + " WHERE " + DataBaseAdapter.Key_DevID + " = ?");
                    cur = dba.ExecuteSelect(strSql, devId);
                    if(cur!=null)
                        cur.moveToFirst();
                    int cordId = cur.getInt(cur.getColumnIndex(DataBaseAdapter.Key_DevCoordId));
                    phoneNumber = dba.getSendSmsMobileNo(cordId);
                    dba.prcUpdateOrClean(devId, 1);
                    cur.close();
                    }
                }else{
                    phoneNumber = dba.getSendSmsMobileNo(dba.CurrentWorkingCoordinator(DataBaseAdapter.Key_SendCoord, 1));
                /*********now getting the Field smsProcess Update for particular devices ********************/
                if(msgId == 3 || msgId == 9 || msgId == 7){
                    devId = message.substring(4, 20);
                    if(dba.IsConOpenOrClose()==false)
                        dba.Open();
                    ConstantClass.CurrentId = devId;
                    dba.prcUpdateOrClean(devId, 1);

                }else if(msgId == 15 || msgId == 13 || msgId == 11 || msgId == 1){
                    if (dba.IsConOpenOrClose()==false)
                        dba.Open();
                    phoneNumber = dba.getSendSmsMobileNo(dba.CurrentWorkingCoordinator(DataBaseAdapter.Key_SendCoord, 1));
                    if(phoneNumber.length()==11){
                        pdNo = phoneNumber.substring(1, 11);
                    }else{
                        pdNo = phoneNumber.substring(0, 10);
                    }
                    devId = "000000" + pdNo;
                    ConstantClass.CurrentId = devId;                
                    dba.prcUpdateOrClean(devId, 1);

                }
                }
                  SmsManager sms = SmsManager.getDefault();
                  if(phoneNumber!=null){
                      sms.sendTextMessage(phoneNumber, null, message.toUpperCase(), sentpi, delpi); 
                  }else{
                      throw new java.lang.NullPointerException() ;
                  }               
            }
        });
        dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                dialog.cancel();
            }
        });
        AlertDialog dlg = dialog.create();
        dlg.show();       
    }catch(Throwable e){
        dlg = new ExceptionDialog(this.ctx,"Sending SMS",e.getMessage());
        dlg.show();
    }   
}
public BroadcastReceiver sms_send = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context,Intent intent){
        String Info = "Send Info:";
        switch(getResultCode()){
        case Activity.RESULT_OK:
            Info += "Sms Send Successfull";
            break;
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
            Info += "Sms Sending faild : genric faliure";
            break;
        case SmsManager.RESULT_ERROR_NO_SERVICE:
            Info += "Sending failed due to no Service";
            break;
        case SmsManager.RESULT_ERROR_NULL_PDU:
            Info += "Send failed : Null PDU";
            break;
        case SmsManager.RESULT_ERROR_RADIO_OFF:
            Info += "Send failed: Radio Service OFF";
            break;
        }
         Toast.makeText(ctx, Info, Toast.LENGTH_SHORT).show();
    }
};
public BroadcastReceiver sms_delivered = new BroadcastReceiver(){
    @Override 
    public void onReceive(Context context, Intent intent){
        String Info = "SMS Delivered :";
        switch(getResultCode()){
        case Activity.RESULT_OK:
            Info += "Sms Deliverd";
            break;
        case Activity.RESULT_CANCELED:
            Info += "Sms not Delivered";
            break;
        }
        Toast.makeText(ctx, Info, Toast.LENGTH_SHORT).show();
    }
};
public IntentFilter getSentIntentFilter(){
    return new IntentFilter(SENT);      
}
public IntentFilter getDeliveredFilter(){
    return new IntentFilter(DELIVERED);
}
/*private void reThrow(MyException ex){
    if(ex.nullPointerException instanceof NullPointerException  ){

    }
}
private class MyException extends Exception{
    public Exception nullPointerException;
    public MyException (){}
    public MyException(Exception NullPointerException){
        this.nullPointerException = NullPointerException;       
    }
}*/
}

解决方案

dialog.setCancelable(true); should be like  dialog.setCancelable(false);

It prevents closure of alert dialog when user presses back button :)

这篇关于发送短信前,显示确认对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆