2017-09-13 6 views
2

私は基本的に、SMSメッセージを受信する受信者とMMSメッセージを受信する受信者の2つの受信者を持つアプリを持っています。アプリケーションが実行されているとき、それは完全に動作し、メッセージは受信され、受信者は両方とも動作します。実行していないときは、アプリ受信者は呼び出されません。アプリが実行されていない限り、受信したSMSメッセージに応答しません。

@Override 
public void onReceive(Context context, Intent intent) { 
    this.context = context; 
    Log.i(TAG, "Intent received: " + intent.getAction()); 
    Toast.makeText(context,"Message Received SMS",Toast.LENGTH_LONG).show(); 
} 

マニフェスト権限すべてが、正しい:

はここSMSReceiverにおける基本的なコードです。 Samsung S7 Edge Android 7.0(Android 24)の実行実行中でなくても、バックグラウンドであっても、テキストは何を受け取ってもよいはずです。

<uses-permission android:name="android.permission.RECEIVE_MMS"/> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"/> 
    <receiver android:name="com.webnation.text2email.receivers.SMSBroadcastReceiver"> 
     <intent-filter android:priority="2147483647"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
     </intent-filter> 
    </receiver> 
    <receiver android:name="com.webnation.text2email.receivers.MMSBroadcastReceiver" > 
     <intent-filter> 
      <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" /> 

      <data android:mimeType="application/vnd.wap.mms-message" /> 
     </intent-filter> 
    </receiver> 
+0

マニフェスト – ahasbini

答えて

0

あなたが使用する必要がありServiceonReceive()でそれを処理するのではなく、それまで以上intentを渡す:

マニフェスト

。また、onReceive()contextパラメータを使用してUIアクションを行うことはできませんが、ActivityまたはServiceを開始するために使用できます。ここで

は実装が onReceive()のためになるかの例です:

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) { 
     Logger.LogI(TAG, "onReceive: received sms"); 
     Intent serviceIntent = new Intent(intent); 
     serviceIntent.setClassName(context, SmsParserService.class.getCanonicalName()); 
     context.startService(serviceIntent); 
    } 
} 

そして、ここでSmsParserServiceのための実装の例です:

/** 
* Service for parsing the SMS and retrieving the message 
*/ 
public class SmsParserService extends IntentService { 

    private static final String TAG = SmsParserService.class.getSimpleName(); 

    public SmsParserService() { 
     this("SmsParserService"); 
    } 

    /** 
    * Creates an IntentService. Invoked by your subclass's constructor. 
    * 
    * @param name Used to name the worker thread, important only for debugging. 
    */ 
    public SmsParserService(String name) { 
     super(name); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Bundle extras = intent.getExtras(); 

     if (extras != null) { 
      Object[] objects = (Object[]) extras.get("pdus"); 

      if (objects != null) { 
       for (Object object : objects) { 
        SmsMessage smsMessage; 
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { 
         smsMessage = SmsMessage.createFromPdu((byte[]) object, extras.getString("format")); 
        } else { 
         smsMessage = SmsMessage.createFromPdu((byte[]) object); 
        } 

        String message = smsMessage.getMessageBody(); 
       } 
      } 
     } 
    } 
} 

そして中AndroidManifest.xml

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

<service 
    android:name=".services.SmsParserService" 
    android:enabled="true" 
    android:exported="false"> 
</service> 

また、 Serviceは、バックグラウンドプロセスです。つまり、一部のUI要素(DialogToastなど)がうまく機能しない可能性があります。代わりにActivityを使用してください。

+0

の '' 'exported'''属性が不足している可能性があります。onReceive()を呼び出すことは決してないので、あなたの提案は呼び出されません。トーストは決して表示されません。さらに、Oreoでは、今後のサービスでの実行は進まない可能性があります。 https://medium.com/exploring-android/exploring-background-execution-limits-on-android-oreo-ab384762a66c –

+0

私は '' AndroidManifest.xml'''エントリで答えを更新しました。あなたは多分あなたが使用しているエントリのために受け取っていません。 Android Oreoをサポートする必要があるため、 '' ''サービス ''がスイートではない場合、 '' '' ''を使うべきだと思うが、私は ''サービス ''を開始しようとしていないOreoの '' Receiver''の中から、またその記事には何も書かれていません – ahasbini

+0

あなたはこれを理解することができましたか? – ahasbini

関連する問題