2011年12月24日土曜日

android:androidで発信した電話番号を取得する

android端末から発信した電話番号は、ブロードキャストで「android.intent.action.NEW_OUTGOING_CALL」を検知したときに取得できる。

電話発信を検知

  • 電話発信により、「android.intent.action.NEW_OUTGOING_CALL」がブロードキャストされる。
  • BroadcastReceiverクラスのonReceiveメソッドにてブロードキャストを検知する。
  • ブロードキャストされた情報から電話番号を取得する。

package net.kuttya.callreceivesample;

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

public class CallReceiveSample extends BroadcastReceiver {

 @Override
 public void onReceive(Context context, Intent intent) {
  // 電話発信を検知
  String actionStr = intent.getAction();

  if(actionStr.equals("android.intent.action.NEW_OUTGOING_CALL")) {
   // 発信した電話番号を取得
   String phoneNumber = intent.getStringExtra("android.intent.extra.PHONE_NUMBER");

   Toast.makeText(context, phoneNumber + "に電話発信中", Toast.LENGTH_LONG).show();
  }
 }
}


  • AndroidManifest.xmlで電話発信へのアクセスを許可しておく。



    

    
        
            
                
            
        
    

    



こんな感じ。

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

android:androidからHTTP-POST通信でバイト列を送信する。

android端末からのPOST通信は、HttpURLConnectionクラスを使用することで簡単に実現できる。

クライアント(android)
  •  HttpURLConnectionのインスタンスを生成する。
  • インスタンスを設定する。
  •  BufferedOutputStreamでリクエストを送信する。
  •  BufferedInputStreamでレスポンスを受信する。

package net.kuttya.httppostsample;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class HttpPostSampleActivity extends Activity {
 private final static String SAMPLE_URL = "http://sample.php";

 private Button submitButton;
 private TextView responseText;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 送信ボタン
        submitButton = (Button)findViewById(R.id.main_submit);

        // レスポンス表示エリア
        responseText = (TextView)findViewById(R.id.main_response);

    }

    /*
     * 送信ボタンクリック
     */
 public void clickEventSubmit(View view) {
  HttpURLConnection http = null;  // HTTP通信
  OutputStream out = null;   // HTTPリクエスト送信用ストリーム
  InputStream in = null;    // HTTPレスポンス取得用ストリーム
  BufferedReader reader = null;  // レスポンスデータ出力用バッファ


  byte[] requestBytes;
  String result = null;

  requestBytes = new byte[5];
  requestBytes[0] = 0x31;
  requestBytes[1] = 0x32;
  requestBytes[2] = 0x33;
  requestBytes[3] = 0x34;
  requestBytes[4] = 0x35;

  try {
   // URL指定
   URL url = new URL(SAMPLE_URL);

   // HttpURLConnectionインスタンス作成
   http = (HttpURLConnection)url.openConnection();

   // POST設定
   http.setRequestMethod("POST");

   // HTTPヘッダの「Content-Type」を「application/octet-stream」に設定
   http.setRequestProperty("Content-Type","application/octet-stream");

   // URL 接続を使用して入出力を行う
   http.setDoInput(true);
   http.setDoOutput(true);

   // キャッシュは使用しない
   http.setUseCaches(false);

   // 接続
   http.connect();

   // データを出力
   out = new BufferedOutputStream(http.getOutputStream());
   out.write(requestBytes);
   out.flush();

   // レスポンスを取得
   in = new BufferedInputStream(http.getInputStream());
   reader = new BufferedReader(new InputStreamReader(in));
   result = reader.readLine();

   // テキストエリアに表示
   responseText.setText(result);


  } catch(Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if(reader != null) {
     reader.close();
    }
    if(in != null) {
     in.close();
    }
    if(out != null) {
     out.close();
    }
    if(http != null) {
     http.disconnect();
    }
   } catch(Exception e) {
   }
  }
 }
}

  •  マニフェストファイルに下記のパーミッションを追加。



サーバ
  • 今回はPHPで作成。
  • HTTPリクエストを取得する。
  • 取得したデータに対する処理を実施。(サンプルは受信データを送り返すだけ)

<?php
// 受信データ格納
$data =  file_get_contents("php://input");

echo "POST DATA RECEIVED. data[".$data."]"

?>

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