2

特定の連絡先に関連する通話、SMS、チャットの Android の統計情報を取得することはできますか? この統計はどこかに保存されていますか? そうでない場合、Android SDK を使用してその統計を取得して保存する方法はありますか? Android NDK を使用していますか? Android システムでは、SMS とチャットのイベントを何らかの方法でフックできますか?

4

1 に答える 1

1

1. 着信コールと発信コールの場合、BroadCastReceivers を介して手動で収集できます。

マニフェスト:

<receiver android:name="IncomingCallReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>
<receiver android:name="OutgoingCallReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
    </intent-filter>
</receiver>

放送受信者:

public class IncomingCallReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        if(extras == null)
            return;

        String callState = extras.getString(TelephonyManager.EXTRA_STATE);

        // ringing state
        if(callState.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){
            String incomingNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
            Toast.makeText(context,"Incoming number: " + incomingNumber,Toast.LENGTH_LONG).show();
        }
    }
}

public class OutgoingCallReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        if(extras == null)
            return;
        // caller
        String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

        // Toast megjelenitese
        Toast.makeText(context,"Outgoing number: "+phoneNumber, Toast.LENGTH_LONG).show();
    }
}

2. Call Log へのカーソルを作成し、このカーソルを反復処理することもできます。

String[] strFields = { android.provider.CallLog.Calls._ID,
        android.provider.CallLog.Calls.NUMBER,
        android.provider.CallLog.Calls.CACHED_NAME};
String strOrder = android.provider.CallLog.Calls.DATE + " DESC";
final Cursor cursorCall = getContentResolver().query(
        android.provider.CallLog.Calls.CONTENT_URI, strFields,
        null, null, strOrder);

3. SMS の場合、 BroadcastReceiversを作成するか、特定のコンテンツに対するContentObserverを作成することもできます。おそらく、チャットはContentObserverでフックできる場所に保存されます。

于 2013-01-24T08:24:15.267 に答える