2012年7月4日水曜日

android:通話ログを取得する

発着信ログにアクセスするには、ContentResolverクラスのqueryメソッドにを使用する。
queryメソッドには引数が5つあり、それぞれ以下を指定する。

1(アクセスするデータ):CallLog.Calls.CONTENT_URI
2(取得するデータ):null
3(データの制限):null
4(第3引数の追加情報):null
5(データの順番):CallLog.Calls.DEFAULT_SORT_ORDER

第2引数に「null」を指定することで、すべてのデータを取得できる。

package net.kuttya.calllog;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.CallLog;
import android.widget.TextView;

public class CallLogSampleActivity extends Activity {
    TextView textView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // テキストビュー
        textView = (TextView)findViewById(R.id.callLogText);
        textView.setText("");

        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DEFAULT_SORT_ORDER);

        if(cursor.moveToFirst()) {
            do {
                // 通話先
                String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
                if(name == null) {
                    name = "登録なし";
                }

                // 電話番号
                String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));

                // 日時
                Date datetime = new Date(cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)));
                SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd (EEE) HH:mm:ss");
                String datetimeStr = format.format(datetime);

                // 通話種別
                String calltype = cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE));
                if(calltype.equals("1")) {
                    calltype = "着信";
                }
                else if(calltype.equals("2")) {
                    calltype = "発信";
                }
                else if(calltype.equals("3")) {
                    calltype = "不在着信";
                }

                // 出力
                textView.append(datetimeStr + ":" + calltype + "\n" + name + "(" + number + ")\n");
                textView.append("----------\n");
            } while(cursor.moveToNext());
        }
    }
}

マニフェストファイルにパーミッションを追加する。


ログ情報が多いため、テキストビューをスクロールさせる。


    
        
    




にほんブログ村 IT技術ブログ Androidアプリ開発へ

2012年7月3日火曜日

android:外部電源の接続/切断を検知

android端末に、電源コードやUSBケーブルを接続/切断したことを検知することができる。

  • 接続を検知するためには、ブロードキャストレシーバで「ACTION_POWER_CONNECTED」のインテントアクションを受信する。
  • インテントアクションを受信するためには、マニフェストファイルに同名のインテントフィルタを登録する。
  • 切断は「ACTION_POWER_DISCONNECTED」
  • アクティビティは必ずしも用意しなくてよい。

package net.kuttya.powerconnect;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class PowerConnectReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  if(intent.getAction().equals("android.intent.action.ACTION_POWER_CONNECTED")) {
   // 外部電源接続のインテントアクションを検知
   Toast.makeText(context, "外部電源接続", Toast.LENGTH_SHORT).show();
  }

  if(intent.getAction().equals("android.intent.action.ACTION_POWER_DISCONNECTED")) {
   // 外部電源切断のインテントアクションを検知
   Toast.makeText(context, "外部電源切断", Toast.LENGTH_SHORT).show();
  }
 }
}

マニフェストファイルにインテントフィルタを登録する。

    
    
        
            
                
                
            
        
    


USBケーブルを接続したときのキャプチャ。






















にほんブログ村 IT技術ブログ Androidアプリ開発へ