2017-01-18 14 views
0

私はwritapingアプリケーションです。これはrestapi番号とメッセージでサーバーから取得し、受信者からSMSを受信します。私は受け取ったときに問題がある160以上の文字を持っています。そして問題は、私がSMSで送るために160文字以上を持っていることです。Xamarin Android 160文字以上のSMSを受信して​​送信する

public override void OnReceive(Context context, Intent intent) 
    { 
     if (intent.HasExtra("pdus")) 
     { 
      var smsArray = (Java.Lang.Object[])intent.Extras.Get("pdus"); 

      foreach(var item in smsArray) 
      { 
       var sms = SmsMessage.CreateFromPdu((byte[])item); 

       SendReceivedStatus(sms.OriginatingAddress, sms.MessageBody); 
      } 
     } 
    } 

SendReceivedStatus(sms.OriginatingAddress、sms.MessageBody);:

SMSコードを受け取ります

これはjson receipentNumberとmessageに変換する私の方法です。

今私の送信のSMSコード:

var sent = PendingIntent.GetBroadcast(Application.Context, 0, new Intent("SMS_SENT"), 0); 

SmsManager.Default.SendTextMessage(responseModel.receipent, null, responseModel.message, sent, null); 

protected override void OnResume() 
    { 
     base.OnResume(); 

     var smsSentReceiver = new SMSSentReceiver(); 

     RegisterReceiver(smsSentReceiver, new IntentFilter("SMS_SENT")); 
    } 

public override void OnReceive(Context context, Intent intent) 
    { 
     switch ((int)ResultCode) 
     { 
      case (int)Result.Ok: 

       SenderActivity.resultsms = true; 
       SendStatus(); 

       break; 
      case (int)SmsResultError.GenericFailure: 

       SenderActivity.resultsms = false; 
       SendStatus(); 

       break; 
      case (int)SmsResultError.NoService: 

       SenderActivity.resultsms = false; 
       SendStatus(); 

       break; 
      case (int)SmsResultError.NullPdu: 

       SenderActivity.resultsms = false; 
       SendStatus(); 

       break; 
      case (int)SmsResultError.RadioOff: 

       SenderActivity.resultsms = false; 
       SendStatus(); 

       break; 
     } 
    } 

どのようにこれらのメッセージをパックするには? SmsMessage.CreateFromPdu((byte[]))以来

+0

問題点は何ですか?あなたが最初に問題が述べられていないときには、あなたを助けるのは難しいです。 – Demitrian

+0

私はこれをjavaからC#に変換する必要があります。 http://stackoverflow.com/questions/13598725/receive-and-concatenation-sms-more-than-160-characters-in-android – coldzero

+0

文字列型に160文字以上のSMSを受け取る必要があります。 – coldzero

答えて

1

は、AndroidのAPIレベル19で廃止されました、ここで私はまた、キットカットのバージョンの後にメッセージを160文字以上を受信するための方法を提供し、ここに私のデモです:

[BroadcastReceiver(Enabled = true, Label = "SMS Receiver")] 
[IntentFilter(new[] { "android.provider.Telephony.SMS_RECEIVED" })] 
public class SMSReceiver : BroadcastReceiver 
{ 
    public override void OnReceive(Context context, Intent intent) 
    { 
     Bundle bundle = intent.Extras; 
     if (bundle != null) 
     { 
      if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat) 
      { 
       SmsMessage[] msgs = Telephony.Sms.Intents.GetMessagesFromIntent(intent); 
       var smstext = new StringBuilder(); 
       foreach (var msg in msgs) 
       { 
        smstext.Append(msg.DisplayMessageBody.ToString()); 
       } 
       Console.WriteLine(smstext.ToString());//output the received sms 
      } 
      else 
      { 
       var smsArray = (Java.Lang.Object[])bundle.Get("pdus"); 
       SmsMessage[] messages = new SmsMessage[smsArray.Length]; 
       for (int i = 0; i < smsArray.Length; i++) 
       { 
        messages[i] = SmsMessage.CreateFromPdu((byte[])smsArray[i]); 
       } 
       StringBuilder content = new StringBuilder(); 
       if (messages.Length > 0) 
       { 
        foreach (var message in messages) 
        { 
         content.Append(message.DisplayMessageBody.ToString()); 
        } 
       } 
       Console.WriteLine(content.ToString());//output the received sms 
      } 
     } 
     Toast.MakeText(context, "Received intent!", ToastLength.Short).Show(); 
    } 
} 

私はAndroid上で私のデモをテストしてみました6.0デバイスとうまく動作するようになりましたが、今はテスト用のAndroid 4.0デバイスを見つけることができませんが、ここではその方法がうまくいくはずです。この問題に関する問題があれば、コメントを残してください。

関連する問題