【问题标题】:How do I send Call Log history via sms in Android?如何在 Android 中通过短信发送通话记录?
【发布时间】:2015-06-23 10:36:41
【问题描述】:

我正在尝试通过短信发送CallLog 历史记录。 CallLog 历史记录显示在 TextView 中,但 SMS 无法正常工作。

代码:

@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);
    }

【问题讨论】:

  • 你需要只在后台发送短信还是如果短信撰写屏幕出现就可以了?
  • @PratikSharma 在后台
  • 好的。请参阅我在下面发布的解决方案。我已经验证了该解决方案,它对我来说效果很好。

标签: android sms calllog


【解决方案1】:

因为您的消息字符串长度可能超过一个消息长度,所以如果字符串超出 SMS 大小限制,请使用 smsManager. divideMessage (String text) 发送消息:

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" />

【讨论】:

  • 谢谢!但是我们不能发送一条消息吗?
  • @Learner678 :只需检查条件,因为我不确定消息长度,这就是我使用 160 的原因,您可以搜索默认消息长度并检查它是否适用于这两种情况。在更改 if(str.length()&gt;130) 而不是 if(str.length()&gt;160) 后尝试
  • 好的!我已更改为其他一些数字,但消息仍然分成多个。
  • @Learner678 : 这是另一个问题,亲爱的,只需在真实设备上检查它或就这个问题提出一个新问题,谢谢你做很多
  • 现在我在 Manifest 中包含了 android.permission.READ_CONTACTS,它在真实设备上工作。在模拟器中它的工作没有添加android.permission.READ_CONTACTS
【解决方案2】:

您的代码运行良好。

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 条发送短信的费用。 :)

希望对你有帮助。

谢谢。

【讨论】:

  • 我想以短信形式发送通话记录历史:)) 并且 ρяσѕρєя K 的代码工作正常!
  • 您的通话记录历史字符串的总长度是多少?
  • 对不起!!不知道。如何获取?
  • str.length(); 会这样做。
【解决方案3】:

发送通话记录信息

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

现在接收方将其作为一条消息处理,我尝试将它的这一块多部分发送,但在一个消息块中接收

发送方

接收方

【讨论】:

    猜你喜欢
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多