Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
kirawa
35 / 35 / 2
Регистрация: 12.11.2013
Сообщений: 345
1

СМС менеджер или блокиратор СМС по содержимому

18.02.2014, 11:13. Просмотров 1994. Ответов 1
Метки нет (Все метки)

вообщем пишу приложение, которое(смс менеджер или блокиратор смс по содержимому), натолкнулся на проблему которою уже давненько не могу решить... вот код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class onReceiver extends BroadcastReceiver {
    private static final String TAG = "SMS_RECEIVER";
 
    @Override
    public void onReceive(Context context, Intent intent) {
        final Bundle bundle = intent.getExtras();
        try {
            if (bundle != null) {
                final Object[] pdusObj = (Object[]) bundle.get("pdus");
                for (Object aPdusObj : pdusObj) {
                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) aPdusObj);
                    String message = currentMessage.getDisplayMessageBody();
                    Log.d(TAG, "message:" + message);
                    final String  s = message.toLowerCase();
                    if (s.contains("test1") || s.contains("test2")){
                        Log.d(TAG,"message: 1");
                        abortBroadcast();
                        Scan d  = new Scan(context,currentMessage);
                        d.run();
                        }
                    }
                }
        }catch (Exception ignored){
 
    }}
    public class Scan implements Runnable{
 
        private SmsMessage Msg;
        private Context ctx;
 
        public Scan(Context paramContext, SmsMessage paramSmsMessage)
        {
            this.ctx = paramContext;
            this.Msg = paramSmsMessage;
        }
        @Override
        public void run() {
            try {
                Thread.sleep(3000);
            }catch (Exception ignored){}
            try
            {
                Uri localUri = Uri.parse("content://sms");
                Cursor localCursor = this.ctx.getContentResolver().query(localUri, null, null, null, null);
                for (;;)
                {
                    if (!localCursor.moveToNext()) {
                        return;
                    }
                    ContentResolver localContentResolver2 = this.ctx.getContentResolver();
                    String[] arrayOfString2 = new String[1];
                    arrayOfString2[0] = this.Msg.getOriginatingAddress();
                    localContentResolver2.delete(localUri, "address=?", arrayOfString2);
                    Log.d(TAG, String.valueOf(localContentResolver2));
                }
            }
            catch (Exception localException)
            {
                localException.printStackTrace();
            }
        }
    }
}
в манифести приемнику стоит приоритет тыща, + все разрешения есть
делал уже по разному... в логах выводил и айдишники одного смс, и айдишник целого потока смс, ну и т.д
НООО не удаляет... гуглил много, пробывал много вариантов.... может ваще рутт нужен?? я в отчаянии

Добавлено через 2 часа 12 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 Uri uriSms = Uri.parse("content://sms/inbox");
                Cursor c = ctx.getContentResolver().query(uriSms, null,null,null,null);
                while (c.moveToNext())
                {
                    String body = c.getString(c.getColumnIndex("body"));
                    long data = c.getLong(c.getColumnIndex("date"));
                    String address = c.getString(c.getColumnIndex("address"));
                    ctx.getContentResolver().delete(
                            uriSms,null,null);
                             Log.d(TAG,body);
                             Log.d(TAG, String.valueOf(data));
                             Log.d(TAG,address);
                }
                c.close();
Поидее я должен сейчас удалить все смс входящие.. поправте, наставте на путь истенный
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 11:13
Ответы с готовыми решениями:

Как задать определённый номер на отправку смс и приём смс
Подскажите, что нужно добавить или переделать чтобы можно было принимать смс...

Реакция на смс
Всем привет! Ребята спасайте, срочно нужно написать приложение на андроид,...

Отправка смс
Всем привет. Есть магазин по продаже ICQ номеров разной длины. Суть в том, что...

Обработка смс
Приветствую. Есть необходимость в сабже. Нашел в нете статью, с похожими...

Приём СМС
Здравствуйте! Уже не первый день пытаюсь прочитать своим приложением входящее...

1
name?
199 / 170 / 52
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
18.02.2014, 13:37 2
я писал подобное приложение вот так:
перехватываем все сообщение нашей программой
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class SmsReceiver extends BroadcastReceiver {
    private StringBuilder body = new StringBuilder();
    
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        String strMsgSrc = "";
        String strMsgDate = "";
        if (extras != null) {
            Object[] smsextras = (Object[]) extras.get("pdus");
 
            for (int i = 0; i < smsextras.length; i++) {
                SmsMessage smsmsg = SmsMessage
                        .createFromPdu((byte[]) smsextras[i]);
 
                 body.append(smsmsg.getMessageBody().toString());
                 strMsgSrc = smsmsg.getOriginatingAddress();
                 strMsgDate =String.valueOf(smsmsg.getTimestampMillis());
 
            }
            Intent mIntent = new Intent(context, SmsService.class);
            mIntent.putExtra("body", body.toString());
            mIntent.putExtra("date", strMsgDate);
            mIntent.putExtra("address", strMsgSrc);
            context.startService(mIntent);
            abortBroadcast();
        }
 
    }
}

далее передаем все в сервис, там мы проверяем текст и думаем сохранять его нам или нет

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public class SmsService extends Service {
   private Context context;
   private String body;
   private String date;
   private String address;
   
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        context = getApplicationContext();
        body = intent.getExtras().getString("body");
        date =  intent.getExtras().getString("date");
        address = intent.getExtras().getString("address");
        new Thread(updateMessage).start();
        return START_STICKY;
    }
    
    private void showNotification(String message, String address) {
        Intent notificationIntent = new Intent(context, MessageActivity.class);
        notificationIntent.putExtra("number", address);
        notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        NotificationCompat.Builder nb = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.small_icon)
                .setAutoCancel(true)
                .setTicker(message)
                .setContentText(message)
                .setContentIntent(
                        PendingIntent.getActivity(context, 0,
                                notificationIntent,
                                PendingIntent.FLAG_UPDATE_CURRENT))
                .setWhen(System.currentTimeMillis())
                .setContentTitle("CompressMe")
                .setDefaults(Notification.DEFAULT_SOUND);
 
        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        @SuppressWarnings("deprecation")
        Notification notification = nb.getNotification();
        notificationManager.notify(R.drawable.ic_launcher, notification);
    }
    
    public static void restoreSms(Context context,String address,String body, String date, String smsPath) {
        ContentValues values = new ContentValues();
        values.put("address", address);//sender name
        values.put("date", date);
        values.put("body", body);
        context.getContentResolver().insert(Uri.parse(smsPath), values);
    }
    
    
    
    
    Runnable updateMessage = new Runnable() {
        public void run() {
            Log.v("HANDLE", "update");
//if(isSave()){ поидее тут должна быть ваша проверка
            body = check(body);
            showNotification(body,address);
            restoreSms(context,address, body, date,SMS_INBOX);
        }
      };
    
    private String check(String body) {
        if(body.charAt(0) == '&'){
            return new Chiper().translateToRus(body);
        }
        return body;
    }
    
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2014, 13:37

Обработать смс
Доброго времени суток. Сбербанковский Квик (терминал для входа на Московскую...

Чтение смс
Здравствуйте. Возникла такая проблема. Необходимо написать приложение на...

Отправка СМС
Здравствуйте. По нажатии кнопки хочу отправлять СМС...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru