2016-02-23 7 views
1

Я знаю, что из KitKat мы должны отображать приложение в качестве стандартного SMS-приложения, чтобы иметь возможность изменять базу данных SMS.Как получать входящие SMS-сообщения на Android KitKat или выше?

Но я не хочу этого. I необходимо только получать уведомление о входящих SMS и отображать как тосты, а также отправьте SMS с кодом.

Должен ли я сделать свое приложение по умолчанию?

Edit 1: Вот мой файл манифеста:

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

    <uses-permission android:name="android.permission.RECEIVE_SMS"/> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.SEND_SMS"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true"> 
     <activity 
      android:name=".SplashScreen" 
      android:label="@string/app_name" 
      android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".LoginScreen" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"/> 
     <activity android:name=".MainScreen" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> 
     </activity> 

     <service android:name=".MainService" 
      android:exported="true"> 
     </service> 

     <receiver android:name=".MainReceiver" 
      android:exported="true" 
      android:enabled="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> 

Вот мой BroadcastReceiver:

package com.rtrgroup.sms_to_neta_server; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Build; 
import android.os.Bundle; 
import android.provider.Telephony; 
import android.widget.Toast; 
import android.telephony.*; 

public class MainReceiver extends BroadcastReceiver{ 
@Override 
public void onReceive(Context context, Intent intent) { 
    if(intent.getAction().equalsIgnoreCase("android.provider.Telephony.SMS_RECEIVED")) { 
     Bundle bundle = intent.getExtras(); 
     try { 
      if (bundle != null) { 
       Object[] pdusObj = (Object[]) bundle.get("pdus"); 

       for (int i = 0; i < pdusObj.length; i++) { 
        SmsMessage currentMessage; 
        if (Build.VERSION.SDK_INT >= 19) { //For ver. >= KitKat 
         SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(intent); 
         currentMessage = msgs[0]; 
        } else { 
         Object pdus[] = (Object[]) bundle.get("pdus"); 
         currentMessage = SmsMessage.createFromPdu((byte[]) pdus[0]); 
        } 

        String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 

        String senderNum = phoneNumber; 
        String messageB1 = currentMessage.getDisplayMessageBody(); 
        String msg = currentMessage.getMessageBody(); 
        String address = currentMessage.getOriginatingAddress(); 

        Toast.makeText(context, senderNum + ": " + msg, Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } catch (Exception e) { 

     } 
    } 
    } 
} 

ответ

1

Вам не нужно быть SMS приложение по умолчанию для отправки SMS. SmsManager.sendTextMessage() все еще работает до тех пор, пока у вас есть разрешение android.permission.SEND_SMS.

Чтобы получать СМСки, вы можете отслеживать трансляцию android.provider.Telephony.SMS_RECEIVED с разрешением android.permission.RECEIVE_SMS.

Реф. http://android-developers.blogspot.fi/2013/10/getting-your-sms-apps-ready-for-kitkat.html

+0

См., Я обновил свой код в вопросе. BroadcastReceiver не стреляет, когда я получаю SMS-сообщение на моем телефоне KitKat. Я что-то не так? – Partha