0

我正在 Android 中创建一个 SMS 应用程序。我想根据地址加密邮件正文。但是一旦我收到任何消息。notificationbar显示显然我不想要的消息正文。有人可以建议我如何禁用此功能并在收到任何消息后立即发送我自己的通知。

编辑:

    public void onReceive(final Context context, Intent intent) {
     if (intent.getAction().equals(SMS_RECEIVED)){

    Bundle extras = intent.getExtras();


    //StringBuilder text = new StringBuilder();

    if (extras != null) {
        abortBroadcast();
        // Get received SMS array
        final Object[] smsExtra = (Object[]) extras.get(SMS_EXTRA_NAME);
        // Get ContentResolver object for pushing encrypted SMS to incoming
        // folder

        final ContentResolver contentResolver = context.getContentResolver();
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {

              public void run() {
                  String messages = "";
                  for (int i = 0; i < smsExtra.length; ++i) {
                        SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]);

                        final String body = sms.getMessageBody().toString();
                         String address = sms.getOriginatingAddress();
                     String body1 = null;
                    String number = null;
                    Log.i("MY_SMS_RECEIVER","body address and length of extras are "+body+" "+address+" "+String.valueOf(smsExtra.length));

                //Do something after 100ms
                  Cursor updateCursor = contentResolver.query(Uri.parse("content://sms/inbox"), new String[]{"address","body","_id","type"}, "address = ?", new String[]{address}, null);
                    Cursor c = contentResolver.query(Uri.parse("content://sms/inbox"), new String[]{"address","body","_id","type"}, "address = ?", new String[]{address}, null);

                    if(c.getCount()>0) 
                    {
                        while(c.moveToNext()){
                            Log.i("ids in inbox content is ",String.valueOf(c.getLong(c.getColumnIndexOrThrow("_id"))));
                        }
                    }
                    c.close();
                    AddressDBHandler dba = new AddressDBHandler(context);
                    ContentValues val = new ContentValues();
                    if(dba.alreadyExisted(address)){
                        if(updateCursor.moveToFirst())
                        {
                             body1= updateCursor.getString(updateCursor.getColumnIndexOrThrow("body")).toString();
                               number = updateCursor.getString(updateCursor.getColumnIndexOrThrow("address")).toString();
                               Long id  = updateCursor.getLong(updateCursor.getColumnIndexOrThrow("_id"));
                               Log.i("MY_SMS_RECEIVER", "frist received message body and address and id is "+body1+" "+number+" "+id.toString());

                            do
                            {
                                String status = "E";
                                id  = updateCursor.getLong(updateCursor.getColumnIndexOrThrow("_id"));
                                EndecDBHandler db = new EndecDBHandler(context);
                                EndecDB  endec = new EndecDB(id.intValue(),status);


                                try {

                                    if(!db.alreadyExisted(endec)){
                                db.insertEncryptedData(endec);
                                Log.i("MY_SMS_RECEIVER","succeeded to insert");

                                val.put("body", SimpleCrypto.encrypt("smstrove", body1));
                                contentResolver.update(
                                        Uri.parse("content://sms/inbox"), val,
                                        "address = ? and body = ?", new String[] { address,body1 });
                                Log.i("MY_SMS_RECEIVER","both databases has been updated");}
                                    }
                                catch(Exception e)
                                {
                                    Log.i("MY_SMS_RECEIVER","could not able to insert");
                                }
                            } while(updateCursor.moveToNext());
                        }
                        updateCursor.close();

                    }
                    messages += "SMS from " + address + " :\n";
                    messages += body + "\n";

                    //putSmsToDatabase(contentResolver, sms, body,context);
                  }
              }
            }, 3000);



        }
    else
        abortBroadcast();

        // Display SMS message
    //  Toast.makeText(context, messages, Toast.LENGTH_LONG).show();


    }
}

我将延迟 3 秒,因为content://sms/inbox需要时间来获取更新,然后将消息发送到存储加密地址的数据库。问题是当我从意图中获取数据后中止广播时,content://sms/inbox没有使用新消息进行更新,并且我无法向用户显示消息。

4

1 回答 1

0

看看这个。在 Android 中拦截消息通知

于 2012-12-19T05:12:39.373 回答