2016-05-10 3 views
1

Я пытаюсь создать простую программу, которая будет пересылать все сообщения с определенным телом на другой номер.Android: получать и пересылать текстовое сообщение из службы

Широковещательный приемник в моем классе не вызывается. Любые выводы будут оценены

MainActivity.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Settings.Applog("App started !!"); 
    Intent intent = new Intent(this, SMSService.class); 
    startService(intent); 
} 

SMSService.java

public class SMSService extends Service { 

private IntentFilter mIntentFilter; 
private SMSreceiver mSMSreceiver; 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onCreate() 
{ 
    super.onCreate(); 
    Settings.Applog("Service started !!"); 
    //SMS event receiver 
    mSMSreceiver = new SMSreceiver(); 
    mIntentFilter = new IntentFilter(); 
    mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
    registerReceiver(mSMSreceiver, mIntentFilter); 
} 

@Override 
public void onDestroy() 
{ 
    super.onDestroy(); 

    // Unregister the SMS receiver 
    unregisterReceiver(mSMSreceiver); 
} 

private String ConvertNumber(String from){ 
    return from; 
} 

public class SMSreceiver extends BroadcastReceiver 
{ 

    private final String TAG = this.getClass().getSimpleName(); 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle bundle = intent.getExtras(); 
     String strMessage = ""; 
     Settings.Applog("Got a message!!"); 
     if (bundle != null) 
     { 
      try{ 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       SmsMessage[] msgs = new SmsMessage[pdus.length]; 
       for(int i=0; i<msgs.length; i++){ 
        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
        String msg_from = msgs[i].getOriginatingAddress(); 
        String msgBody = msgs[i].getMessageBody(); 
        Settings.Applog("Message body ::"+msgBody); 
       } 
      }catch(Exception e){ 
       //Log.d("Exception caught",e.getMessage()); 
      } 

     } 
    } 
} 

}

Manifest.xml

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <uses-permission android:name="android.permission.WRITE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 

    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

    <service 
     android:name=".SMSService" 
     android:exported="false"> 
    </service> 

</application> 

</manifest> 
+0

Разрешения выходят за пределы '' тегов. Кроме того, вам не нужно постоянно запускать 'Сервис' для получения входящих SMS. Хотя вы можете динамически регистрировать приемник, как и вы, было бы предпочтительнее статически зарегистрировать класс Receiver, как показано в ответе Kowshick, и запустить вашу «Сервис» для обработки обработки и ответа в методе 'onReceive()'. –

ответ

1

Вы должны зарегистрировать Broadcast Recei ver для получения SMS в файле манифеста. Просто разрешение не будет работать.

Внутри тега приложения он будет выглядеть примерно так:

<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" > 
    <receiver android:name=".SMSBroadcastReceiver"> 
     <intent-filter> 
      <action android:name="android.provider.telephony.SMS_RECEIVED"></action> 
     </intent-filter> 
    </receiver> 

</application> 

использовать это в качестве примера для получения сообщения SMS. Это должно быть хорошей отправной точкой. http://javapapers.com/android/android-receive-sms-tutorial/

+0

Пробовал. Не работает. – Vegito1044

+0

Ну. Я нашел альтернативу, которая действительно работала, Но не так, как я хотел. Я сделал отдельный файл для широковещательного приемника (не из сервиса), он сработал. – Vegito1044

 Смежные вопросы

  • Нет связанных вопросов^_^