在OnReceive方法上将数据库数据存储在BroadcastReceiver上的最佳方法,然后更新活动

时间:2012-05-24 04:51:10

标签: android eclipse java-ee

我有近六个活动和一个带有BroadcastReceiver的服务类,它在后台运行以接收短信。我收到关于OnReceive方法的BroadcastReceiver的短信现在我想在数据库中存储错误的sms数据,因为我已经为smsProcess创建了一个SMSSync类,它现在将数据传递给dbase我在OnReceive方法上调用了这个smsProcess这个工作没问题但我想更多短信同时收到我发现问题我认为这是由于数据库。先生,请告诉我收到短信数据后最好的方法是什么?接收后再显示活动。索里因为我的英语不好或者不明白。在此先感谢先生回复回答我将等待。我接收方法的标签代码

感谢 Om Parkash Kaushik

public SMSReceiver(Context 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();
        }
    }
    }

1 个答案:

答案 0 :(得分:0)

我做了与你相关的相同应用程序。但是,我没有保存所有收到的短信,而是只保存与银行交易相关的短信。我希望以下代码可以帮助你..

ReceiveSms.java

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

DbHandler.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);
    }