コンテンツプロバイダーからの通話ログ、SMSログなどのシステムメトリックを読み取る小さなプロジェクトがあります。
コンテンツプロバイダーから読み取り、(Call / SMS)Metricsクラスのオブジェクトに情報を保存するために、 (Call / SMS)Loggerクラスを作成しました。
MainActivityは、 (Call / SMS)Metricsクラスのオブジェクトの情報を使用し、databaseOpenHelperクラスを使用して自分のデータベースにデータを保存します。
ここで、CursorLoaderを使用してコンテンツプロバイダーからデータをロードする予定です。
私が見た例は、MainActivityがLoaderManager.LoaderCallbacksを実装していることを示唆しています
実際のクエリが非アクティビティクラスで行われる場合、プロジェクトでこれをどのように使用できますか?
アクティビティでI1loaderMangerを作成し、アクティビティ以外のすべてに使用できますか?
サンプルコードスニペットは次のとおりです。
メインアクティビティからデータのコレクションを呼び出し、コンテキストをclssessに渡して、マネージャーカーソルで使用できるようにします。
private void CollectSystemMetrics() {
//passing the context in constructor so that it can be passed to
//the non activity classes which need it for quering
SystemMetricsCollector collector = new SystemMetricsCollector(this);
_callMetrics = collector.CollectCallMetrics();
_smsMetrics = collector.CollectSMSMetrics();
Toast toast = Toast.makeText(
MyActivity.this,
"Calls and SMS Data Collected",
Toast.LENGTH_SHORT);
toast.show();
}
SMSDataをレイドするSystemMetricsCollectorのメソッド
public SMSMetrics CollectSMSMetrics() {
SMSLogger smsLogger = new SMSLogger(_context);
smsLogger.ReadSMSDataFromPhone();
return smsLogger.GetSMSMetrics();
}
SMSLoggerクラスの変数。
Uri smsUri = Uri.parse("content://sms");
String[] selectColumns = null;
String where = null;
String whereArgs[] = null;
String sortBy = null;
カーソルを使用してデータを読み取るSMSLoggerのメソッド
public void ReadSMSDataFromPhone() {
int inCount = 0, outCountContacts = 0, outCountUnknown = 0;
Cursor managedCursor;
managedCursor = _context.getContentResolver().query(
smsUri,selectColumns,where,whereArgs,sortBy);
try {
if (managedCursor.moveToFirst()) {
int idxAddress = managedCursor.getColumnIndexOrThrow("address");
int idxType = managedCursor.getColumnIndex("type");
do {
int valType = managedCursor.getInt(idxType);
switch (valType) {
case 2://outgoing
String valAddress =
managedCursor.getString(idxAddress);
if (isContact(valAddress)) outCountContacts++;
else outCountUnknown++;
break;
default://incoming
inCount++;
break;
}
} while (managedCursor.moveToNext());
}
} finally {
managedCursor.close();
}//end finally
_smsMetrics.set_receivedSMS(inCount);
_smsMetrics.set_sentSMSContacts(outCountContacts);
_smsMetrics.set_sentSMSUnknown(outCountUnknown);
}