2017-03-08 3 views
1

私はsmsアクティビティ(SMSのみ)のすべての機能をサポートするSMSアプリケーションを構築しました。しかし今、私の問題は、私のアプリがすでにSMS用のデフォルトのものであるときに、私のアプリを通じてSMSを送信したいときにコンタクトビューからその番号を得ることができないということです。ここに私が達成したいことを説明するための画像があります。 When I click to the sms icon,my app is opened by I can't get the number 自分のアクティビティでアクションSEND/SENDTOを処理するコードがありませんが、私はちょうどintent-filter:action.SEND、action.SENDをマニフェストファイルに記述しました。デフォルトのSMSアプリとして選択可能なアプリです。私は連絡先ビューの番号はonActivityResultからアクセスされていると思ったが、うまくいかないようだ。助けてください!コンタクトビューから、自分のSMSアプリケーションに連絡先番号を送信して、SMSをSMSに送信する方法

+1

'SEND' /' SENDTO'アクションを扱う 'Activity'のコードを提供するようあなたの質問を編集し、電話番号/連絡先IDを取得する際の問題点を正確に説明してください。 –

+0

私の質問が更新されました。私の質問で説明するように、私は連絡先のデータを扱うコードがありません。 –

+0

ええ、数字はあなたの 'Activity'を開始するのに使用された' Intent'に添付されます。これに対して、 'onActivityResult()'メソッドは機能しません。私は答えをまとめるつもりです。 –

答えて

0

連絡先からSENDTOを取得する場合、数 - 場合によっては複数の番号が - あなたのActivityを開始Intent上のデータUriとして添付されます。 Activityを初期化するときは、適切な処置を確認し、必要に応じて番号を取得してください。基本たとえば

:より強固な実装については

if (Intent.ACTION_SENDTO.equals(getIntent().getAction())) { 
    Uri data = getIntent().getData(); 
    String numbers = data.getSchemeSpecificPart(); 
} 

Uriになる可能性のある追加のパラメータを削除するのが賢明だろう、と任意の非ラテン数字を交換します。

if (Intent.ACTION_SENDTO.equals(getIntent().getAction())) { 
    Uri data = getIntent().getData(); 
    String numbers = data.getSchemeSpecificPart(); 

    // Strip any extraneous parameters 
    int i = numbers.indexOf('?'); 
    numbers = (i == -1) ? numbers : numbers.substring(0, i); 

    // Replace non-Latin digits, and ensure our delimiter is something we expect 
    numbers = PhoneNumberUtils.replaceUnicodeDigits(numbers).replace(",", ";"); 
    ... 
} 

複数の番号が受信された場合、彼らが来るべきカンマやセミコロン区切りStringを。上記はカンマをセミコロンに置き換えているため、後で使用するものについては心配する必要はありません。複数の番号を受け取った場合は、split()numbersで個々の番号を取得することができます。

+1

ありがとう。私はこれで試してみて、結果を知らせてくれるでしょう。それは本当に必要なコードの種類です –

+0

魅力のように動作します、ありがとう、私の日を救う! –

+0

問題ありません。喜んで助けてください。スタックオーバーフローへようこそ、btw。乾杯! –

関連する問題