Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
#1

СМС менеджер или блокиратор СМС по содержимому - Программирование Android

18.02.2014, 11:13. Просмотров 1754. Ответов 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();
Поидее я должен сейчас удалить все смс входящие.. поправте, наставте на путь истенный
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 11:13     СМС менеджер или блокиратор СМС по содержимому
Посмотрите здесь:
Android Как задать определённый номер на отправку смс и приём смс
Чтение смс Android
Приём СМС Android
Реакция на смс Android
Android Отправка смс
Android Обработка смс
Приходят смс с крякозябрами Android
Отправка длинного СМС Android
Вывод смс в textView Android
Конвертирование email в смс Android
Android Проверка смс на содержимое
Отправка смс на сервер. Кодировка? Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
name?
198 / 169 / 18
Регистрация: 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;
    }
}
Yandex
Объявления
18.02.2014, 13:37     СМС менеджер или блокиратор СМС по содержимому
Ответ Создать тему
Опции темы

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