0

我有大约六个活动和一个带有广播接收器的服务类,它们在后台运行以接收短信。我现在在 BroadcastReceiver 的 OnReceive 方法上接收 SMS 我想将传入的 sms 数据存储在数据库中,因为我已经为 smsProcess 创建了一个 SMSSync 类,它现在将数据传递给 dbase 我在 OnReceive 方法上调用这个 smsProcess 这工作正常,但我认为当更多短信同时收到我发现问题我认为这是由于数据库。先生,请告诉我在收到短信数据后存储短信数据的最佳方法是什么,然后在活动中显示。对不起,我的英语不好或者听不懂。在此先感谢先生,请回复回复我会等待的..我为 On Receive 方法标记代码

感谢 Om Parkash Kaushik

公共 SMSReceiver(上下文 ctx){

    this.context = ctx;
    sync = new SMSSync(context);
    dba = new DataBaseAdapter(ctx);         
}

@Override
public void onReceive(Context context,final Intent intents){
    if (intents.getAction().equals(ConstantClass.SMS_RECEIVED)) {

        try{
        Bundle bundle = intents.getExtras();            
        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            SmsMessage[] messages = new SmsMessage[pdus.length];
            for (int i = 0; i < pdus.length; i++)
                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            String msg=null;
            String temp = null;
            for (SmsMessage message : messages) {
                msg = message.getMessageBody();
                temp = message.getOriginatingAddress();
            }               
             if(msg.length()>5 && msg.startsWith("<") && msg.contains(">")){

            String len = msg.substring(1, 3);
            int tl = temp.length();
            int l = tl - no;
            address = temp.substring(l,tl);
            int value =Integer.valueOf(len, 16).intValue();
            int index = msg.indexOf(">");
            if(value == index+1){
                dba.Open();                 
                int id = dba.getCordiId(address);
                Cursor cur = dba.getCoord(id);
                if(cur!=null)
                    cur.moveToFirst();
                final String Phnumber = cur.getString(cur.getColumnIndex(DataBaseAdapter.Key_MbNo));
                    if(Phnumber.equals(address)){
                    int count = dba.getDeviceCount(ConstantClass.dbName[1]);
                    if(count<=0){
                        dba.InsertCurrentCoord(id,id);
                    }else{
                        Strsql = new String("UPDATE " + ConstantClass.dbName[1] + " SET " + DataBaseAdapter.Key_ReceiverCoord + " = " + 
                                Integer.toString(id) + " WHERE " + DataBaseAdapter.Key_ID + " = ?");
                        dba.UpdateQuery(Strsql, Integer.toString(1));
                    }
                    dba.Close();

                    sync.smsProcess(msg);

                                            abortBroadcast();
            /************Now deleting the SMS from the Inbox*********************/                  
                                            removeMessage(SMSReceiver.this.context, Phnumber);  
                    if(msg.substring(3, 4).equals("2"))
                        ConstantClass.isAuditrequestSend = false;           

        /*******after receiving the sms opening the Main Screen.*****************/
                    if(ConstantClass.Clear_Main_Screen==true){
                        Intent intent = new Intent(context,ZigbeeActivity.class);
                        context.startActivity(intent);
                    }
                }else{
                    Toast.makeText(SMSReceiver.this.context, address, Toast.LENGTH_LONG).show();
                }
            }else{
                Toast.makeText(SMSReceiver.this.context, "message Corrupt" + address, Toast.LENGTH_LONG).show();
            }
        }
        }
    }catch(Exception e){
        dlg = new ExceptionDialog(SMSReceiver.this.context,"On Sms Receiver" + address ,e.getMessage());
        dlg.show();
        }
    }
    }
4

1 回答 1

0

我已经完成了与您相关的相同应用程序。但我不想保存所有收到的短信,我只想保存与银行交易相关的短信。我希望下面的代码对你有帮助..

接收短信.java

if(smsg.contains("credit") /***********/ || msg.contains("amount"))
   {
    Toast.makeText(context, "message related to transcation", Toast.LENGTH_SHORT).show();
    dbh.smsservice(smsg);
   } 

数据库处理程序.java

   public void smsservice(String sms) 
        {
    // TODO Auto-generated method stub

    String smessg="INSERT INTO SMSDETAILS(SMSMESS) VALUES('"+sms+"') ";
    sdb.execSQL(smessg);
    System.out.println("values of sms inserted"+smessg);
    }
于 2012-05-24T05:04:20.903 回答