0

SMS を受信するためにバックグラウンドで実行される約 6 つのアクティビティと、BroadcastReceiver を持つサービス クラスがあります。BroadcastReceiver の OnReceive メソッドで SMS を受信します。受信した sms データをデータベースに保存したいので、データを dbase に渡す smsProcess の SMSSync クラスを作成しました。OnReceive メソッドでこの smsProcess を呼び出します。これは正常に機能しますが、さらにsms が同時に受信されました。問題が見つかったのは、データベースが原因だったと思います。受信後にSMSデータを保存し、アクティビティに表示するための最良の方法を教えてください。私の悪い英語、または理解できない場合は申し訳ありません。事前に感謝します。pl は返信を元に戻します。お待ちしております..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

私はあなたに関連する同じアプリケーションを実行しました。しかし、受信したすべてのSMSを保存する代わりに、銀行取引に関連するSMSのみを保存したいと思います。次のコードがお役に立てば幸いです。

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);
    }
于 2012-05-24T05:04:20.903 に答える