2011-03-27 32 views
1

AndroidがSMSを送信するたびにデータを取得しようとしています。送信SMSからデータを取得

データ形式:

  1. 先の電話番号
  2. 納期
  3. SMSボディ

誰もがどのように知っていますか?

+0

何?私はSMSマネージャを使用する場合。私は、SMS管理者がSMSを送信してデータを捕まえることができると聞きました。 – Billy

+0

まず、答えでない限り、あなた自身の質問に答えないでください。回答にコメントがある場合は、回答にコメントを追加します。第二に、 'SmsManager'は「送信SMSからのデータを捕まえる」ことはありません。 – CommonsWare

+0

データを取得するための提案がありますか? Btw、人々の答えに返信する方法?私はどんな返信も見ません。 – Billy

答えて

5

送信箱にSMSを入れてください。

public List<SmsRep> getOutboxSms() 
{ 
    if(null == context) 
    { 
     return new ArrayList<SmsRep>(); 
    } 

    Uri uriSms = Uri.parse("content://sms/sent"); 
    Cursor cursor = context.getContentResolver().query(uriSms, null,null,null,null); 
    List<SmsRep> outboxSms = cursor2SmsArray(cursor); 

    if(!cursor.isClosed()) 
    { 
     cursor.close(); 
    } 

    return outboxSms; 
} 

そして送られたボックス内のデータを処理するための方法:SmsRepの

public static List<SmsRep> cursor2SmsArray(Cursor cursor) 
    { 
     if(null == cursor || 0 == cursor.getCount()) 
     { 
      return new ArrayList<SmsRep>(); 
     } 

     List<SmsRep> messages = new ArrayList<SmsRep>(); 

     try 
     { 
      for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) 
      { 
       SmsRep singleSms = new SmsRep(); 
       singleSms.id = cursor.getInt(cursor.getColumnIndexOrThrow("_id")); 
       singleSms.address = cursor.getString(cursor.getColumnIndexOrThrow("address")); 
       singleSms.timestamp = cursor.getLong(cursor.getColumnIndexOrThrow("date"))/1000; //### the sent time 
       singleSms.type = cursor.getInt(cursor.getColumnIndexOrThrow("type")); 
       singleSms.protocol = cursor.getInt(cursor.getColumnIndexOrThrow("protocol")); 

       /* 
       String smsSubject = cursor.getString(cursor.getColumnIndex("subject")); 
       byte[] subjByts = smsSubject.getBytes("UTF8"); 
       singleSms.subject = new String(subjByts, "UTF8"); 
       */ 


       String smsBody = cursor.getString(cursor.getColumnIndexOrThrow("body")); //### body 
       byte[] bodyBytes = smsBody.getBytes("UTF8"); 
       singleSms.body = TextUtils.htmlEncode(new String(bodyBytes, "UTF8")); //escape,handle '='    
       singleSms.deviceId = deviceId; 

       //singleSms.body = cursor.getString(cursor.getColumnIndexOrThrow("body")); 
       messages.add(singleSms); 
      } 

     } 
     catch (Exception e) 
     { 
      Log.e(TAG, e.getMessage()); 
     } 
     finally 
     { 
      cursor.close(); 
     } 

     return messages;   
} 

定義:

public class SmsRep 
    { 
    static String separator ; 

    public int id; 
    public String address; 
    public long timestamp; 
    public int type; 
    public int protocol; 
    public String subject; 
    public String body; 
    public String deviceId; 

     public SmsRep() 
     { 
       // do nothing in ctor 
     } 


} 

何をしたいこれです:)

+0

SmsRepの内容は何ですか? – Billy

0

これはAndroid SDKには何もありません。申し訳ありません。

0

SMSを受信したときに通知を受けることはできますが、SMSの送信時に通知を受ける方法はありません。

+0

あなたはこれのソースがありますか? – Olli

+0

まあ、私の経験。私は何かを見つけようとします。 – Jonas

+0

データを取得するための提案がありますか? – Billy

-1
Uri uriSMS = Uri.parse("content://sms/sent"); 

    Cursor cur = getActivity().getContentResolver().query(uriSMS , null, null, null, null); 

    Cursor messagesCursor = getActivity().getContentResolver().query(uriSMS , new String[]{"_id", "address", "body", "person", "date",}, null, null, null); 


    if(messagesCursor.getCount() > 0) { 
     try { 
      while (messagesCursor.moveToNext()) 
      { 
       int x=messagesCursor.getInt(messagesCursor.getColumnIndex("_id")); 
       String address=messagesCursor.getString(messagesCursor.getColumnIndex("address")); 
       String body=messagesCursor.getString(messagesCursor.getColumnIndex("body")); 
       String person=messagesCursor.getString(messagesCursor.getColumnIndex("person")); 
       String date_=messagesCursor.getString(messagesCursor.getColumnIndex("date")); 

      } 
     } 
     catch(Exception ex) 
     { 

     } 
    } 
関連する問題