生まれなかったアプリの話

MSCCが一段落したので一旦違うアプリをつくろうと考えました。
色々考えて、個人的にあったら便利だなーと思ったアプリが、

「別のスマホで電話の発着信が出来るアプリ」

1213200191801

プライベートと仕事で電話分けたいけど、移動中ポケットに複数電話入れるのもあれだし(現状入れてるんだけど)、沢山電話あるとどの電話なってるのか謎なので全部1つで管理したいということです。
想定していた利用方法は以下の通り。

  • スマホ2台を事前にBluetoothでペアリングする。
  • メインのスマホでメインもサブも発着信出来る。
  • サブのスマホに着信があったらフックしてメインのスマホに着信の通知をする。
  • メインのスマホから応答、拒否をする。(拒否した場合そのまま切る)
  • メインのスマホでサブの通話が出来る。

と、こんな所で、これをXamarinを使ってAndroidとiOSで実装したいと思っていました。

まずAndroidのAPIから調査を開始。
着信に関しては普通にAPIがあったのでMainActivityに以下を追加ででフック可能。
Android.Manifest.xmlのRequired permissionsにあるReadPhoneStateにチェック入れるのを忘れずに。
(所々にあるSumireはアプリ名に予定していた菫から来ています。)

using Android.Telephony;
[BroadcastReceiver]
[IntentFilter(new[]{"android.intent.action.PHONE_STATE"})]
public class SumireReceiver : BroadcastReceiver
{
	public override void OnReceive(Context context, Intent intent)
	{
		if (intent.Extras == null)
		{
			return;
		}

		string state = intent.GetStringExtra (TelephonyManager.ExtraState);

		// 着信時
		if (state == TelephonyManager.ExtraStateRinging)
		{
			string telephone = intent.GetStringExtra (TelephonyManager.ExtraIncomingNumber);
			if (string.IsNullOrEmpty (telephone))
			{
				telephone = string.Empty;
			}
		}
		// 応答時
		else if (state == TelephonyManager.ExtraStateOffhook)
		{
			// incoming call answer
		}
		// 電話切った時(待機状態)
		else if (state == TelephonyManager.ExtraStateIdle)
		{
			// incoming call end
		}
	}
}

問題はここからで、Bluetoothで接続しているメインに着信通知を送ったとしてどうやって受話、切断するのか。

切断に関しては直ぐに記載が見つかったのですが、どうやら公式APIはAndroid2.3で切られているらしく、非公式APIのiTeleohonyなんたらを使う必要がありそうです。
また受話に関しては全く記載が見つからなかったので、Android開発に詳しい友人に聞いた所やはり公式APIはなく、非公式APIを使うどころかroot権限的な動きをする非公式APIを使う必要があると言われそこまでして実装するアプリでもないと断念。

でも、Bluetoothヘッドホンとか拒否は出来ないけど応答は出来るよなーとか思って、今度はBluetoothプロファイリングで操作出来ないか調査。
BluetoothHeadset | Android Developers

  • public List<BluetoothDevice> getConnectedDevices ()
    接続しているデバイス一覧を取得する。
  • public int getConnectionState (BluetoothDevice device)
    デバイスの接続状態を取得する。
  • public List<BluetoothDevice> getDevicesMatchingConnectionStates (int[] states)
    接続状態に一致するデバイスを取得する。
  • public boolean isAudioConnected (BluetoothDevice device)
    デバイスが接続されているか取得する。
  • public boolean sendVendorSpecificResultCode (BluetoothDevice device, String command, String arg)
    ベンダー固有の結果を送信する(APIが公開されていないと利用できない)
  • public boolean startVoiceRecognition (BluetoothDevice device)
    音声認識を開始する。
  • public boolean stopVoiceRecognition (BluetoothDevice device)
    音声認識を終了する。

ない。
ということで通話に関するAPIはありませんでしたので諦めました。
iOSに関しても電話をフックしたようなアプリを見たことがないので恐らく同じように不可能だと思います。(未調査)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中