Search code examples
androidsmsbroadcastreceiver

my sms receiver can't accept new sms


i want to receive sms on my application, but when i try to get new sms my application didn't get the new sms. I cannot find where I am doing wrong. I'm not sure if there's something wrong with the code, or debugging.

I'm trying to be notified if a new SMS arrives and save the sms on my database.

this is my receiver.

public void onReceive( Context c, Intent i) {
    Bundle b = i.getExtras();
    SmsMessage[] m = null;
    String s = "";
    TelephonyManager teleponyManager = (TelephonyManager) c.getSystemService(Context.TELEPHONY_SERVICE);
    int x;
    if (b != null) { //IF valid SMS
        Object[] p = (Object[]) b.get("p");
        m = new SmsMessage[p.length];
        for (x = 0; x < m.length; x++) { //FOR ambil konten SMS
            m[x] = SmsMessage.createFromPdu((byte[])p[x]);
            s += "SMS dari " +m[x].getOriginatingAddress().toString().trim();
            s += " :";
            s += m[x].getMessageBody().toString();
            s += "\n";                              
        }
        Toast.makeText(c, s, Toast.LENGTH_LONG).show();

        nomor = m[x].getOriginatingAddress().toString().trim();
        pesan = m[x].getMessageBody().toString();

        Cursor cursorKontak = data.pilihKontak(nomor);
        if(cursorKontak.moveToFirst()) {
            idkontak = cursorKontak.getString(cursorKontak.getColumnIndex("idkontak"));
        }

        if(idkontak == null) {
            nama = nomor;
            data.inputKontak(nama, nomor);

            Cursor cursorKontak2 = data.pilihKontak(nomor);
            if(cursorKontak2.moveToFirst()) {
                idkontak = cursorKontak2.getString(cursorKontak2.getColumnIndex("idkontak"));
            }

            data.inputPesanMasuk(idkontak, pesan);      

        }else {
            data.inputPesanMasuk(idkontak, pesan);
        }

        Intent broadcastIntent = new Intent();
        broadcastIntent.setAction("SMS_RECEIVED_ACTION");
        broadcastIntent.putExtra("sms", s);
        c.sendBroadcast(broadcastIntent);

my android manifest

Update

<?xml version="1.0" encoding="UTF-8"?>
<manifest android:versionCode="1" android:versionName="1.0"
package="com.sms" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="10"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
    <activity android:label="@string/app_name"
        android:name="EnkripsiSMS" android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
      </activity>
        <receiver android:name=".SMSReceiver" >
            <intent-filter >
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>

    <activity android:name=".KotakMasuk"/>
    <activity android:name=".TulisPesan"/>
    <activity android:name=".KotakKeluar"/>
    <activity android:name=".HasilEnkripsi"/>
    <activity android:name=".KirimPesan"/>
    <activity android:name=".IsiPesanKeluar"/>
    <activity android:name=".DekripsiPesanKeluar"/>
    <activity android:name=".HasilDekripsiPesanKeluar"/>
    <activity android:name=".TeruskanPesanKeluar"/>
    <activity android:name=".KirimPesanKeluar"/>
    <activity android:name=".IsiPesanMasuk"/>
    <activity android:name=".DekripsiPesanMasuk"/>
    <activity android:name=".TeruskanPesanMasuk"/>
    <activity android:name=".HasilDekripsiPesanMasuk"/>
    <activity android:name=".Balas"/>
    <activity android:name=".HasilBalas"/>
    <activity android:name=".KirimPesanMasuk"/>
</application>
</manifest>

can somebody help me? i really need the solution. thanks..


Solution

  • Instead of p use pdus

    Object[] p = (Object[]) b.get("pdus");