Amin
Amin

Reputation: 3186

Receiving SMS in Android Manifest.xml

I try to receive an sms in my app and I think the problem is in my AndroidManifest.xml file

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.amin_amini.smstestmobi"
      android:versionCode="1"
      android:versionName="1.0.0">
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
        <activity android:name=".SMS"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".SmsReceiver"
                  android:enabled="true"
                  android:exported="true"
                  android:permission="android.permission.BROADCAST_SMS"> 
            <intent-filter android:priority="1000"> 
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
            </intent-filter> 
        </receiver> 
    </application>
</manifest>

My SmsReceive.java is like this

package com.amin_amini.smstestmobi;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver
{   
    @Override
    public void onReceive(Context context, Intent intent) 
    {
    //---get the SMS message passed in---
    Bundle bundle = intent.getExtras();        
    SmsMessage[] msgs = null;
    String str = "";            
    if (bundle != null)
    {
        //---retrieve the SMS message received---
        Object[] pdus = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];            
        for (int i=0; i<msgs.length; i++)
         {
            msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
            str += "SMS from " + msgs[i].getOriginatingAddress();                     
            str += " :";
            str += msgs[i].getMessageBody().toString();
            str += "\n";
        }
        //---display the new SMS message---
        Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
    }                   
    Toast.makeText(context, "Hey", Toast.LENGTH_SHORT).show();
    }
}

I'm sure my problem is in manifest.xml because the

 Toast.makeText(context, "Hey", Toast.LENGTH_SHORT).show();

don't show anything.
what should I do ?

edit: As our friends said bellow I used

    Log.i("Hey","Hey" );

in my function but nothing will be shown in LogCat So I'm defenetly sure that my problem is in me AndroidManifest.xml note: I'm using android 4.0.3 on HTC Sensation

Upvotes: 4

Views: 15507

Answers (2)

Zohaib
Zohaib

Reputation: 2865

Yes your code is working fine here.

this is my androidmanifest

<receiver android:name=".SmsReceiver" >
            <intent-filter >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

and i have added these permission

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

or download this code.. i have made this . it recieve sms and shows in dialog box.

Upvotes: 1

Pir Fahim Shah
Pir Fahim Shah

Reputation: 10623

Change Your receiver code to that, it will help you, if still its not working then may be you have installed another SMS apps which will have higher priority and will abord the broadcast services.

     <receiver android:name=".SmsReceiver"> 
        <intent-filter android:priority="1000">
            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="PACKAGE_NAME.android.action.broadcast"/> 
             <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
        </intent-filter> 
    </receiver>

Upvotes: 4

Related Questions