Возможно ли заблокировать исходящие SMS?

Вот код, который я использую,

public class MyCallControllerActivity extends Activity { static int Count; /** Called when the activity is first created. */ CheckBox blockAll_cb;//,blockcontacts_cb; BroadcastReceiver CallBlocker; TelephonyManager telephonyManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initviews(); CallBlocker =new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); //Bundle bundle = intent.getExtras(); if ( bundle != null ) { // do you manipulation on String then if you can abort. } Object messages[] = (Object[]) bundle.get("pdus"); SmsMessage smsMessage[] = new SmsMessage[messages.length]; for (int n = 0; n <messages.length; n++) { smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); } if("+919739036754".equalsIgnoreCase(smsMessage[0].getOriginatingAddress())) { //abortBroadcast(); String Body=smsMessage[0].getMessageBody(); if (Body.startsWith("START")) { Toast toast6 = Toast.makeText(context,"There is START ", Toast.LENGTH_LONG);toast6.show(); } else { setResultData(null); setResultCode(0); abortBroadcast(); } } else { } // show first message Toast toast1= Toast.makeText(context,"Sent SMS: " + smsMessage[0].getOriginatingAddress()+ "\nBody: "+smsMessage[0].getMessageBody(), Toast.LENGTH_LONG); toast1.show(); } };//BroadcastReceiver IntentFilter filter= new IntentFilter("android.provider.Telephony.SMS_SENT"); registerReceiver(CallBlocker, filter); } public void initviews() { blockAll_cb=(CheckBox)findViewById(R.id.cbBlockAll); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); if (CallBlocker != null) { unregisterReceiver(CallBlocker); CallBlocker = null; } 

Вот Манифест,

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.block" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <uses-feature android:name="android.hardware.telephony" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.RECEIVE_MMS" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.block.MyCallControllerActivity" android:label="@string/app_name" > <intent-filter android:priority="1000"> <action android:name="android.intent.action.MAIN" /> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <action android:name="android.provider.Telephony.SMS_SENT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Вы не можете заблокировать исходящие SMS из приложения Message по умолчанию, потому что для исходящих текстовых сообщений нет широковещательной передачи.

Простой поиск Google покажет это. https://www.google.com/search?q=block+outgoing+sms+android+programmatically

Я заставляю его работать, но только с корневым устройством с разрешением MODIFY_PHONE_STATE

 public class OutgoingSMSReceiver extends Service { private static final String CONTENT_SMS = "content://sms/"; static String messageId = ""; private class MyContentObserver extends ContentObserver { Context context; private SharedPreferences prefs; private String phoneNumberBlocked; public MyContentObserver(Context context) { super(null); this.context = context; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); prefs = context.getSharedPreferences("com.example.testcall", Context.MODE_PRIVATE); phoneNumberBlocked = prefs.getString("numero", ""); Uri uriSMSURI = Uri.parse(CONTENT_SMS); Cursor cur = context.getContentResolver().query(uriSMSURI, null, null, null, null); if (cur.moveToNext()) { String message_id = cur.getString(cur.getColumnIndex("_id")); String type = cur.getString(cur.getColumnIndex("type")); String numeroTelephone=cur.getString(cur.getColumnIndex("address")).trim(); if (numeroTelephone.equals(phoneNumberBlocked)) { if (cur.getString(cur.getColumnIndex("type")).equals("6")) { ContentValues values = new ContentValues(); values.put("type", "5"); context.getContentResolver().update(uriSMSURI,values,"_id= "+message_id,null); } else if(cur.getString(cur.getColumnIndex("type")).equals("5")) { context.getContentResolver().delete(uriSMSURI,"_id=?",new String[] { message_id}); } } } } @Override public boolean deliverSelfNotifications() { return false; } } @Override public void onCreate() { MyContentObserver contentObserver = new MyContentObserver(getApplicationContext()); ContentResolver contentResolver = getBaseContext().getContentResolver(); contentResolver.registerContentObserver(Uri.parse(CONTENT_SMS), true, contentObserver); } } <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />