豊富なコミュニケーションメッセージ(Vodafoneのようないくつかのネットワークでチャットと呼ばれる)を傍受したいと思います。私は首尾よく動作するインテントフィルターとブロードキャストレシーバーを使ってSMSレシーバーを実装しました。しかし、SMSがリッチ・コミュニケーション・メッセージである場合、受信機は決して呼び出されない。私のマニフェストでAndroidで豊富なコミュニケーションメッセージを傍受する方法
:
<receiver
android:name=".IncomingSMS"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
と私の放送受信機は、次のようになります。
public class IncomingSMS extends WakefulBroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
if (bundle != null)
{
final Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage currentMessage;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
String format = bundle.getString("format");
currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[0], format);
}
else
{
//noinspection deprecation
currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[0]);
}
String number = currentMessage.getDisplayOriginatingAddress();
Intent serviceintent = new Intent(context, ChargingMonitorService.class);
serviceintent.putExtra(NUMBER, number);
startWakefulService(context, serviceintent);
} // bundle is null
}
}
このすべては、テキストメッセージは、リッチコミュニケーション(またはチャット)である場合を除いて完璧に動作メッセージonReceive ()が呼び出されることはありません。
Androidのドキュメントには何もありませんので、ベンダー固有の意図であると想定していますが、それは何ですか?
RCSはSMSとはまったく関係がありませんので、受信者は決して着火することはありません。 Android用のオープンソースのRCS実装はいくつかありますが、簡単なテキストメッセージを扱うよりもはるかに複雑です。 –
RCSはSMSとは異なりますが、ボーダフォンのSamsung携帯電話で同じデフォルトのメッセージングアプリで処理されます。私は知らないが、私はそれがサムスンの特徴ではないと仮定している。バブルの中に「SMS」があり、「チャット」があるものもあります。 Androidデベロッパーのドキュメントには何もないので、特定のデバイスでのみ動作するベンダー固有の意図であるとは思われますが、それでも何かを知りたいと思っています。私は、送信者の詳細を検出することだけに興味があるので、メッセージを完全に解釈するために必要な複雑なコードは必要ありません。 –