2013-05-03 2 views
0

Я пишу sms-приемник код андроида, но он не работает, есть ли здесь кто-нибудь может помочь? он компилируется, но когда я получаю смс, он не отображается, как предполагалось, при использовании Toast. это мой код:Android: sms-приемник не работает

package com.example.homecontrolingbysms; 

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 messageReceived = "";    
     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]); 
       messageReceived +="From "+ msgs[i].getOriginatingAddress(); 
       messageReceived+=" : "; 
       messageReceived += msgs[i].getMessageBody().toString(); 
       messageReceived += "\n";   
      } 


      //---display the new SMS message--- 
      Toast.makeText(context, messageReceived, Toast.LENGTH_SHORT).show(); 
     }       
    } 

} 


я также отправил manifets, чтобы убедиться, что все важные части кода доступны
manifets.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.homecontrolingbysms" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.SEND_SMS"/> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.homecontrolingbysms.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name="com.example.homecontrolingbysms.Door" 
      android:label="@string/app_name" > 
     </activity> 

     <activity 
      android:name="com.example.homecontrolingbysms.Window" 
      android:label="@string/app_name" > 

     </activity> 

     <activity 
      android:name="com.example.homecontrolingbysms.Light" 
      android:label="@string/app_name" > 

     </activity> 

    </application> 

</manifest> 
+0

Каковы ваши намерения-фильтры в манифесте? – waqaslam

+2

У вас есть разрешения в файле манифеста? – Vladimir

+0

Вы регистрируете BroadcastReceiver (SmsReceiver) в файле android-manifest.xml? – Zeel

ответ

2

Регистрация smsreceiver путем добавления ниже кода в menifest file

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

Это ссылки могут вам помочь.

Receiving SMS on Android App

http://shreymalhotra.me/blog/tutorial/receive-sms-using-android-broadcastreceiver-inside-an-activity/

Пожалуйста, проверьте его.

0

Я думаю, что ваш манифест выглядит нормально; проблема с линией: Ошибки в этой части, я думаю, вы можете изменить этот

Bundle bundle = intent.getExtras();   
    SmsMessage[] msgs = null; 
    String messageReceived = "";    
    if (bundle != null) 

к чему-то вроде этого

public void onReceive(Context context, Intent intent) { 
    Log.i(TAG, "Intent recieved: " + intent.getAction()); 
    intent.getAction().equals(ACTION) { 
     Bundle bundle = intent.getExtras(); 
     if (bundle != null) { 
      Object[] pdus = (Object[])bundle.get("pdus"); 

(вам нужно сделать сравнение объекта на строке действий, или просто не делайте сравнения), в вашем файле манифеста вы получили сообщение с ошибкой SMS_RECEIVED.

+0

почему? по какой-либо причине? – njzk2

+0

@ njzk2 извините, но я не понял? – mohammad

+0

какая польза от этой части кода? – njzk2

0

Если вы хотите получать какие-то трансляции, нужно продуть вещи. 1. В Manifest.xml, вы должны объявить приемник с целью фильтр ехра: 2. если радиопередача, что вы хотите получить упорядочена, вы должны убедиться, что ваш приоритет. android: priority = "1000"