SMS salientes emitidos con denegación de permisos

Quiero registrar todos los sms de envío y seguir el código de abajo

Clase SMSObserver

public class ServiceObserver extends ContentObserver { private Context mContext; //private String contactId = "", contactName = ""; private String smsBodyStr = "", phoneNoStr = ""; private long smsDatTime = System.currentTimeMillis(); static final Uri SMS_STATUS_URI = Uri.parse("content://sms/out"); public ServiceObserver(Handler handler, Context ctx) { super(handler); mContext = ctx; } public boolean deliverSelfNotifications() { return true; } public void onChange(boolean selfChange) { try{ //Log.e("Info","Notification on SMS observer"); Cursor sms_sent_cursor = mContext.getContentResolver().query(SMS_STATUS_URI, null, null, null, null); if (sms_sent_cursor != null) { if (sms_sent_cursor.moveToFirst()) { String protocol = sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("protocol")); Log.e("Info","protocol : " + protocol); int type = sms_sent_cursor.getInt(sms_sent_cursor.getColumnIndex("type")); Log.e("Info","SMS Type : " + type); // for actual state type=2 if(type == 2){ Log.e("Info","Id : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("_id"))); Log.e("Info","Thread Id : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("thread_id"))); Log.e("Info","Address : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("address"))); Log.e("Info","Person : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("person"))); Log.e("Info","Date : " + sms_sent_cursor.getLong(sms_sent_cursor.getColumnIndex("date"))); Log.e("Info","Read : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("read"))); Log.e("Info","Status : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("status"))); Log.e("Info","Type : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("type"))); Log.e("Info","Rep Path Present : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("reply_path_present"))); Log.e("Info","Subject : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("subject"))); Log.e("Info","Body : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("body"))); Log.e("Info","Err Code : " + sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("error_code"))); smsBodyStr = sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("body")).trim(); phoneNoStr = sms_sent_cursor.getString(sms_sent_cursor.getColumnIndex("address")).trim(); smsDatTime = sms_sent_cursor.getLong(sms_sent_cursor.getColumnIndex("date")); Log.e("Info","SMS Content : "+smsBodyStr); Log.e("Info","SMS Phone No : "+phoneNoStr); Log.e("Info","SMS Time : "+smsDatTime); } } } } else Log.e("Info","Send Cursor is Empty"); } catch(Exception sggh){ Log.e("Error", "Error on onChange : "+sggh.toString()); } super.onChange(selfChange); } 

}

Y en la actividad principal

 ServiceObserver smsSentObserver = new ServiceObserver(new Handler(), this); this.getContentResolver().registerContentObserver(SMS_STATUS_URI, true, smsSentObserver); 

Y el permiso seguido se ha añadido en el archivo de manifiesto

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.sms" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permssion android:name="android.permission.READ_SMS"/> <uses-permssion android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar" android:name="com.test.sms.mainactivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.test.sms.ServiceReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver> </application> 

Pero después de haber intentado enviar los sms desde el primer emulador a la segunda hasta obtener el permiso de error como este

* Error en onChange: java.lang.SecurityException: Permiso Denial: proveedor de apertura com.android.providers.telephony.SmsProvider …. requiere android.permission.READ_SMS o android.permission.WRITE_SMS *

Cualquier persona puede ayudar por favor ….. gracias …

Es debido a su error ortográfico ( permssion lugar de permission ). Simplemente cambie las líneas de acuerdo a esto:

 <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.WRITE_SMS" /> 

Agregue el permiso siguiente en el archivo de manifiesto.

<uses-permission android:name="android.permission.SEND_SMS" />

Espero eso ayude.

Gracias.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.