2017-03-08 64 views
1

我已經構建了一個短信應用程序,它支持短信活動(只有短信)的所有功能。但現在,我的問題是,當我的應用程序已經是默認的短信,我不能從通過我的應用程序發送短信到聯繫人視圖的號碼。這裏是圖像來解釋我想達到什麼。 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.SENDTO,因爲如果我們想要使用應用程序可選作爲默認的短信應用程序。我認爲來自聯繫人視圖的號碼是從onActivityResult訪問的,但它似乎不起作用,請幫忙!從聯繫人視圖,如何發送聯繫人號碼到我的短信應用程序,發送短信到它

+1

請編輯您的問題,以提供處理'SEND' /'SENDTO'操作的'Activity'的代碼,並解釋您在檢索電話號碼/聯繫人ID時遇到的問題。 –

+0

好吧,我更新了我的問題。正如我在我的問題中解釋的那樣,我沒有任何代碼來處理聯繫人的數據,你能建議我一個還是隻是一個有用的鏈接? –

+0

是的,這個號碼將被附加到用於啓動你的Activity的'Intent'。 'onActivityResult()'方法對此不起作用。給我一分鐘,我會彙總一個答案。 –

回答

0

正從通訊錄中SENDTO時,數量 - 可能有多個號碼 - 將作爲數據Uri上開始你的ActivityIntent進行安裝。在初始化您的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

沒問題。樂意效勞。歡迎來到堆棧溢出,順便說一句。乾杯! –