電話アプリ(CALL)のIntent Filterの設定方法について

1,698 views
Skip to first unread message

nobu

unread,
Mar 7, 2011, 4:23:09 AM3/7/11
to 日本Androidの会
お世話になります。Intent Filterの設定で質問させてください。

今電話アプリをつくろうとしています。
Android標準の電話アプリは、番号入力画面(Intent.ACTION_DIALで呼び出すもの)から
番号を入力して、受話器を上げるボタンを押すと発信画面(Intent.ACTION_CALLで呼び出す物)
がでて通話ができるようになります。
この、電話番号入力画面で受話器を取り上げた後、標準の発信画面ではなく自前のアプリ
を呼び出すようにしたいのです。
# Skypeがこの挙動を実現しており、同じようにしたいと思っています。

そこで、Intent Filterを下記のように設定してしてみましたが、うまくいきません。
# 2パターン試すもうまくいかず・・・

= パターン1 ======================================
<intent-filter>
  <action android:name="android.intent.action.CALL" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="tel"/>
</intent-filter>
===============================================

= パターン2 ======================================
<intent-filter>
  <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="tel" />
</intent-filter>
===============================================

この辺りの設定、挙動についてなにかご存じの方がいらっしゃいましたら、
アドバイスの程よろしくお願い致します。


■実行環境
端末:Nexus S(Android Ver2.3.2)
Android:Ver2.3(API Lv9)

■AndroidManifest.xml全て
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sample.call"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/
app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">

<intent-filter>
<action android:name="android.intent.action.CALL" />
<category
android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel"/>
</intent-filter>

</activity>

</application>
<uses-sdk android:minSdkVersion="9" />

<uses-permission android:name="android.permission.CALL_PHONE"></uses-
permission>
<uses-permission android:name="android.permission.CALL_PRIVILEGED"></
uses-permission>
</manifest>


■参考にしたサイト
http://mobileorchard.com/android-app-development-intents-and-intent-filters
http://groups.google.com/group/android-sdk-japan/browse_thread/thread/20529a055c1db1d2
http://d.hatena.ne.jp/yoshagb3/20100513/1273731994


sakdroid

unread,
Mar 7, 2011, 5:21:30 AM3/7/11
to android-g...@googlegroups.com
sak+ です。

android.intent.action.NEW_OUTGOING_CALL

はブロードキャスト INTENT です。
ブロードキャストレシーバーで受けてますか?

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>

sakdroid

unread,
Mar 7, 2011, 8:07:55 PM3/7/11
to android-g...@googlegroups.com
sak+ です。

問題は解決しましたか?

この件に関してブログ記事を書きました。よければ参考にどうぞ。

NEW_OUTGOING_CALL を捕捉せよ! ( sak's Android Avenue )

http://sakplus.jp/2011/03/08/new_outgoing_call/

nobu

unread,
Mar 7, 2011, 8:58:41 PM3/7/11
to 日本Androidの会
nobuです

>sak+さん

回答ありがとうございます。対応できました!
NEW_OUTGOING_CALLをBroadcastReceiverで受けることはわかって
いたのですが、Skypeの挙動を見ていたので、ActivityにIntent Filter
を設定するだけでいけるものだと思っていました。
sak+さんに教えていただいたやり方で進めたいと思います。
ありがとうございました。
> > >http://mobileorchard.com/android-app-development-intents-and-intent-f...
> > >http://groups.google.com/group/android-sdk-japan/browse_thread/thread...

hiroq team

unread,
Mar 8, 2011, 11:08:40 AM3/8/11
to android-g...@googlegroups.com, nobu
nobuさん

こんばんは。team-hiroqです。
Intent Filterでもできそうですよ。

一応、呼び出されたactivityで電話番号は取れたので
やり方はこちらに載せました。

では失礼します。
team-hiroq



2011年3月8日10:58 nobu <mini...@gmail.com>:

nobu

unread,
Mar 9, 2011, 8:07:00 AM3/9/11
to 日本Androidの会
team-hiroqさん

こんばんわ。nobuです。
教えていただいたやり方でも出来ました。
# 当初想定していたSkypeの動作と同じですね!

BroadcastReceiverを使う方法でもIntent Filterを設定する方法
でもどちらでも行けそうです。双方検討して、どちらかを採用さ
せていただければと思います。

アドバイスありがとうございました。


On 3月9日, 午前1:08, hiroq team <team.hi...@gmail.com> wrote:
> nobuさん
>
> こんばんは。team-hiroqです。
> Intent Filterでもできそうですよ。
>
> 一応、呼び出されたactivityで電話番号は取れたので
> やり方はこちらに載せました。http://team-hiroq.com/blog/android/android_call_action_hook.html
>
> では失礼します。
> team-hiroq
>
> 2011年3月8日10:58 nobu <minin...@gmail.com>:
> > > > > このグループから退会するには、android-group-j...@googlegroups.comにメールを送信してくださ い。
> > > > > 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> > からこのグループにアクセスしてください。
>

hiroq team

unread,
Mar 9, 2011, 6:55:04 PM3/9/11
to android-g...@googlegroups.com
nobuさん、おはようございます

1つ注意ですが、broadcastは標準の電話アプリが
選択された後に投げています。
ですから、broadcastを捕まえる方法では、Skypeを選択された場合は処理できません。
Android sourceをみる限りそう見えます。(動作確認はしていませんが)

nobuさんのやりたい事の場合、broadcastで問題ないとは思いますが念のため補足でした。

以上、よろしくお願いします
team-hiroq(http://team-hiroq.com)

2011年3月9日水曜日 nobu mini...@gmail.com:

>> > > > > <uses-sdk android:minSdkVersion="9> > > > > 詳細については、http://groups.google.com/group/android-group-japan?hl=ja


>> > からこのグループにアクセスしてください。
>>
>> > --
>> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
>> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
>> > このグループから退会するには、android-group-j...@googlegroups.comにメールを送信してくださ い。
>> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>

sakdroid

unread,
Mar 9, 2011, 8:52:51 PM3/9/11
to android-g...@googlegroups.com
sak+ です。

team-hiroq さんの記事を拝見しました。
CALL_PRIVILEGED を使う方法は知りませんでした。ブログ記事たいへん参考になりました。

この件、自分でも実際に試したみてブログ記事にまとめました。サンプルコードも置いています。この際、team-hiroq さんと同じ方法では面白くないので、アプリ内でフィルターの有効/無効を切替える機能を追加しています。

http://sakplus.jp/2011/03/10/callhook/

NEW_OUTGOING_CALL と CALL_PRIVILEGED のどちらが早く捕捉できるかという点も実際に試してみました。team-hiroq さんの指摘の通り CALL_PRIVILEGED が先に捕捉されるようですね。

アプリの開発時にはこの辺りに注意が必要です。

では

Reply all
Reply to author
Forward
0 new messages