4

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

Amin
  • 3,056
  • 4
  • 23
  • 34
  • Don't debug a broadcast receiver with a Toast. Use a log message or a breakpoint. I'm not even sure if you can fire a Toast from one of those. – Thomas Dignan Dec 15 '12 at 09:13
  • yeah, I'm pretty sure that `context` is the Application context, not the activity context. Won't be able to show dialog's either. Use Log.i(*). – edthethird Dec 15 '12 at 09:14
  • I am doing something similar HERE!!! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – Etienne Lawlor Jan 22 '13 at 08:14

2 Answers2

4

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>
Pir Fahim Shah
  • 10,505
  • 1
  • 82
  • 81
  • thanks for your help but I tried that and again it doesn't work on real devices and I do not have anothe SMS app also I've test it on 5 android devices wich it didn't work on the I've put Log.i("Received","Received"); in first line of onReceive but nothing is logged in LogCat :(( – Amin Dec 17 '12 at 17:59
  • Thanks for help finally I found that my problem is my own phone and when I saw it's not working I changed my AndroidManifest.xml and then I test it on other devices witch it didn't work , my phone has a custom ROM (MIUI) and I think it's sms app priority is higher than anything I changed my sendMessage to sendDataMessage and also my receiver so I can receive it in my app :) thank for help buddy ;) – Amin Dec 20 '12 at 09:21
  • @user1905965 , thats great that you got it, keep it up and post any your question on stackoverflow.com, because this forum is the best one for all of us. – Pir Fahim Shah Dec 20 '12 at 13:11
1

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.

Robin Kanters
  • 5,018
  • 2
  • 20
  • 36
Zohaib
  • 2,845
  • 2
  • 23
  • 33
  • Thank for help but I previosly added those permissions , also I downloaded your code from dropbox but it doesn's show anything and I only see my sms in my messaging app :( – Amin Dec 15 '12 at 15:31
  • try to use log instead of toast. and put some logs in different place in broadcast receiver. it will help you to debug. try it. – Zohaib Dec 15 '12 at 16:26
  • try to run it in android emulator . check if its working or not – Zohaib Dec 15 '12 at 16:32
  • it works fine in an emulator (android 2.2) but it doesn't work on real devices :( – Amin Dec 17 '12 at 17:55