2012-12-15 109 views
3

我想通過短信發送CallLog歷史記錄。那麼CallLog歷史顯示在TextView,但SMS不起作用。如何通過短信在Android中發送呼叫記錄歷史記錄?

代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_call_log); 
tv = (TextView) findViewById(R.id.call); 

    getCallDetails(); 
} 


private void getCallDetails() { 
    // TODO Auto-generated method stub 
    StringBuffer sb = new StringBuffer(); 
    Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI,null, null,null, null); 
    int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
    int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
    int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); 
    int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 
    sb.append("Call Details :"); 
    while (managedCursor.moveToNext()) { 
    String phNumber = managedCursor.getString(number); 
    String callType = managedCursor.getString(type); 
    String callDate = managedCursor.getString(date); 
    Date callDayTime = new Date(Long.valueOf(callDate)); 
    String callDuration = managedCursor.getString(duration); 
    String dir = null; 
    int dircode = Integer.parseInt(callType); 
    switch(dircode) { 
    case CallLog.Calls.OUTGOING_TYPE: 
    dir = "OUTGOING"; 
    break; 

    case CallLog.Calls.INCOMING_TYPE: 
    dir = "INCOMING"; 
    break; 

    case CallLog.Calls.MISSED_TYPE: 
    dir = "MISSED"; 
    break; 
    } 
    sb.append("\nPhone Number:--- "+phNumber +" \nCall Type:--- "+dir+" \nCall Date:--- "+callDayTime+" \nCall duration in sec :--- "+callDuration); 
    sb.append("\n----------------------------------"); 
    } 
    managedCursor.close(); 


    String str = sb.toString(); 
    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage("5554", null, str, null, null); 
    } 
+0

你需要在後臺只發送短信或者是好的,如果短信撰寫屏幕會進入圖片? –

+0

@PratikSharma在背景 – DroidLearner

+0

好吧。查看我在下面發佈的解決方案。我已經驗證了這個解決方案,它對我來說工作得很好。 –

回答

3

因爲有可能你的消息字符串長度超過一個消息長度,使用smsManager. divideMessage (String text)發送消息,如果字符串超過SMS大小限制爲:

SmsManager sms = SmsManager.getDefault(); 

if(str.length()>160){ 
    ArrayList<String> smses = smsManager.divideMessage(str); 

     smsManager.sendMultipartTextMessage("5554", null, 
        smses, null, null); 
} 
else{ 
     sms.sendTextMessage("5554", null, smses, null, null); 
} 

,並確保您已在AndroidManifest.xml中添加以下權限:

<uses-permission android:name="android.permission.SEND_SMS" /> 
+0

謝謝!但我們無法發送單條消息嗎? – DroidLearner

+0

@ Learner678:只是檢查條件,因爲我沒有確認消息長度,這就是爲什麼我使用160你可以搜索默認消息長度,並檢查它是否會在這兩種情況下工作。嘗試改變'if(str.length()> 130)'而不是'if(str.length()> 160)' –

+0

好吧!我已經改變了一些其他的數字,但仍然是信息分成多個。 – DroidLearner

1

您的守則運作良好。

SmsManager sm=SmsManager.getDefault(); 

String phoneNumber="xxxxxxxxxx"; 
String message="test text message"; 

sm.sendTextMessage(phoneNumber, null, message, null, null); 

我認爲您需要添加此權限。

<uses-permission android:name="android.permission.SEND_SMS"/> 

我試了一下,它也收取了我1發短信。 :)

希望它可以幫助你。

THanks。

+0

我想發送呼叫記錄歷史作爲短信:))和ρяσѕρєяK的代碼工作! – DroidLearner

+0

您的通話記錄歷史記錄字符串的總長度是多少? –

+0

對不起!不知道。如何獲取? – DroidLearner

0

發送呼叫日誌中的消息

SmsManager sms = SmsManager.getDefault(); 
ArrayList<String> part = sms.divideMessage(sb.toString()); 
sms.sendMultipartTextMessage("number to whom u wanna send", null, part, null, null); 

現在接收方將會處理它作爲一個消息我嘗試了多部分發送的該塊,但在消息

發送者的一個塊接收側

sender side

ř eceiver側

receiver side

相關問題