3

最近ダイヤルした5つの番号を取得する必要があるアプリケーションに取り組んでいます。最近ダイヤルした番号が最初になるように、番号を降順に並べ替えることができます。次のコードを使用して最近の数値を取得しています。

dialledCall = (TextView)findViewById(R.id.dialledCall);

              String strOrder = CallLog.Calls.DATE + " DESC";
              Cursor mCallCursor = getApplicationContext().getContentResolver().query(CallLog.Calls.CONTENT_URI,
                      null,
                      CallLog.Calls.TYPE 
                      ,null,
                      strOrder);
              mCallCursor.moveToFirst();
              do {
                  if( i >5 )
                      break;
                  mobileNumber =   mCallCursor.getString(mCallCursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
              number += mobileNumber + "\n";

              i++;
              }
              while (mCallCursor.moveToNext());
         dialledCall.setText(number);

これにより、最近の順序で数字を並べ替えることができ、最後の 5 つの数字を取得しました。しかし、クエリはすべての番号を返します。つまり、Dialed、Missed、Received も同様です。しかし、ここではダイヤル番号だけが必要です。

CallLog.Calls.TYPE上記のクエリに関係があることはわかっています。

null 値を渡そうとしましたが、すべての数値が返されます。

私もCallLog.Calls.OUTGOING_TYPE代わりに試してみましたが、int 値が許可されていないというエラーが発生します。文字列値である必要があります。

ダイヤルされた通話のみを取得するために、上記のコードを置き換える方法に関する提案。

注 -私はすでにhttps://stackoverflow.com/a/10480569/1626878を見てきましたが、ダイヤルされた番号のみを取得するソリューションは提供していません。

4

2 に答える 2

1

問題を解決したので、今後の訪問者のために投稿します。

    String mobileNumber="";
    int i = 1;
    String number = "";
    TextView dialledCall;
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            dialledCall = (TextView)findViewById(R.id.dialledCall);

    //              String[] strFields = { android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.TYPE, android.provider.CallLog.Calls.CACHED_NAME,         android.provider.CallLog.Calls.CACHED_NUMBER_TYPE, android.provider.CallLog.Calls.DURATION     };
                  String strOrder = CallLog.Calls.DATE + " DESC";
                  Cursor mCallCursor = getApplicationContext().getContentResolver().query(CallLog.Calls.CONTENT_URI,
                          null,
                          CallLog.Calls.TYPE + " = " + CallLog.Calls.OUTGOING_TYPE
                          ,null,
                          strOrder);
                  mCallCursor.moveToFirst();
                  do {
                      if( i >5 )
                          break;
                      mobileNumber =   mCallCursor.getString(mCallCursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
                  number += mobileNumber + "\n";

                  i++;
                  }
                  while (mCallCursor.moveToNext());
             dialledCall.setText(number);
        }

このCallLog.Calls.TYPE + " = " + CallLog.Calls.OUTGOING_TYPEクエリでは、ダイヤルされたコールが分離されています。

于 2012-12-13T08:24:23.407 に答える
1

CallLog クラスを使用して、この情報を取得できます ( http://developer.android.com/reference/android/provider/CallLog.Calls.htmlを参照)。

最後にかけた電話番号を返す getLastOutgoingCall メソッドに興味があります。

通話履歴を確認します。これに簡単にアクセスできます。次のようなことをしてください。

定義、公開Cursor mCallCursor

次に、通話ログから取得するフィールドを定義します。

public static final String[] STR_FIELDS = {
        android.provider.CallLog.Calls.NUMBER, 
        android.provider.CallLog.Calls.TYPE,
        android.provider.CallLog.Calls.CACHED_NAME,
        android.provider.CallLog.Calls.CACHED_NUMBER_TYPE,
        android.provider.CallLog.Calls.DATE,
        android.provider.CallLog.Calls.DURATION, android.provider.CallLog.Calls.CACHED_NUMBER_LABEL,android.provider.CallLog.Calls.NUMBER
        };

順番を設定 public static final String STR_ORDER = android.provider.CallLog.Calls.DATE + "DESC";

カーソルを呼び出します。

mCallCursor = getContentResolver().query(
            android.provider.CallLog.Calls.CONTENT_URI,
            STR_FIELDS,
            null,
            null,
            STR_ORDER);     
于 2012-11-17T11:58:11.987 に答える