電話の通信のイベントについて

1,317 views
Skip to first unread message

And-Y

unread,
Dec 11, 2011, 12:13:20 AM12/11/11
to 日本Androidの会
ntent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:
0123456789"));

startActivity(intent);

においてダイヤル発信はできたのですが

相手が応答した時や通話中だった場合のイベントを取得したいです

次にどんなコードを書き込んだらよいでしょうか?

お手数ですが教えていただけますか?

田代透

unread,
Dec 11, 2011, 9:54:52 AM12/11/11
to android-g...@googlegroups.com
startActivity ではなく startActivityForResult を使ったら何かコードが帰って来ませんか?

2011年12月11日14:13 And-Y <yumeo...@yahoo.co.jp>:

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

--
--
Toru Tashiro
toru...@gmail.com

And-Y

unread,
Dec 12, 2011, 9:42:28 AM12/12/11
to 日本Androidの会
田代様こんばんは

コメントありがとうございます
startActivity(intent); をstartActivityForResult(intent, test);
に変えてやってみました

new Intent(Intent.ACTION_CALL,Uri.parse("tel:0123456789"));

startActivityForResult(intent, test);
を実行した時点で結果はLogに0が返ってきました

その後10秒ほどして相手を呼び出します
そして話中または応答と言う手順に入ります

やはり何かイベント的なものはないでしょうか?

下記のようなコードでやってみました
まだAndoroido及びJavaを始めて半年くらいなので
startActivityForResultに対するコードの書き方
考え方が間違ってるでしょうか?

ただ私にとってstartActivity(intent)をstartActivityForResult
に替える事で戻り値が取得出来る事が分かっただけでもとても

うれしいです^^ ありがとうございます^^


package an.doro144;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

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

}// End onCreate ----------------------------

// main.xmlでボタンイベント起動を記載している
public void AAA(View view) {
int test=0;

Intent intent = // 直接電話をかける


new Intent(Intent.ACTION_CALL,Uri.parse("tel:0123456789"));

// アクティビティーの起動
//startActivity(intent);
startActivityForResult(intent, test);

Log.d ( "ABC",String.valueOf(test));


}// End void AAA(View view)
}// End Activity

田代透

unread,
Dec 12, 2011, 10:29:23 AM12/12/11
to android-g...@googlegroups.com
startActivityForResult で呼び出したアクティビティのリザルトは

onActivityResult メソッドで受け取ります。
http://developer.android.com/intl/ja/reference/android/app/Activity.html#StartingActivities

ただ、DIALERアクティビティがそれぞれの状態を返すリザルトを返すとは限らないので試してみてください。
だめなら、コンテントプロバイダの CallLog.Calls.CONTENT_URI を使って通話履歴を取ることもできると思います。
ただ、通話中なのか通話完了なのかなど、判断が必要だと思います。

2011年12月12日23:42 And-Y <yumeo...@yahoo.co.jp>:

Nakakaze Ichiro

unread,
Dec 12, 2011, 9:53:13 PM12/12/11
to android-g...@googlegroups.com
ここへ、返信していいのでしょうか?
戻り値=0は、キャンセルですね。

私の場合、呼び出し先のアクティビティの起動タイプ(?)を
シングルタスクだったかシングルインスタンスにしていたので
キャンセルされていました。

もし、該当しているならスタンダードで起動してみてはいかがでしょうか?

アルゴロード

Nakakaze Ichiro

unread,
Dec 12, 2011, 10:09:22 PM12/12/11
to android-g...@googlegroups.com
念のため、
> > >                  int test=0

> > >                  startActivityForResult(intent, test);
> > >
> > >                  Log.d ( "ABC",String.valueOf(test));
では、
「test」の値は、ゼロから変わりませんので、、

アルゴロード

And-Y

unread,
Dec 13, 2011, 7:26:01 AM12/13/11
to 日本Androidの会
田代様 こんばんは

http://developer.android.com/intl/ja/reference/android/app/Activity.h...

接続してみましたが今の私のスキルでは難しいです自分自身に悔しさを感じます

ここに質問する前に通話履歴でなんとかならないかと試みましたが通話が終了した
時点で履歴が書き込まれるように想いました現在進行中の状態ではまだ履歴に
ならないような感じを受けました

それから質問する前に留守番電話のアプリがないか検索してみましたあるとすれば何か方法が
あるんじゃないかと逆算する為に検索したんですが結果はNGでした

またアンドロイド 通話応答 などでも検索したんですがこれもHitしません
でした

やっぱり無いのかなぁ・・・・

今の私には無理なのかな~? と挫折ぎみです

On 12月13日, 午前12:29, 田代透 <toru2...@gmail.com> wrote:
> startActivityForResult で呼び出したアクティビティのリザルトは
>

> onActivityResult メソッドで受け取ります。http://developer.android.com/intl/ja/reference/android/app/Activity.h...


>
> ただ、DIALERアクティビティがそれぞれの状態を返すリザルトを返すとは限らないので試してみてください。
> だめなら、コンテントプロバイダの CallLog.Calls.CONTENT_URI を使って通話履歴を取ることもできると思います。
> ただ、通話中なのか通話完了なのかなど、判断が必要だと思います。
>

> 2011年12月12日23:42 And-Y <yumeoibi...@yahoo.co.jp>:

> toru2...@gmail.com- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

And-Y

unread,
Dec 13, 2011, 7:34:20 AM12/13/11
to 日本Androidの会

Nakakaze Ichiro 様 こんばんは、お付き合いありがとうございます^^

コメントありがとうございます^^

戻り値0はキャンセルですか?じゃその後発信中でもイベントはありませんよ
て意味だと考えていいでしょうか?

スタンダードで起動 アルゴロード

スキル不足で申し訳ないですお手数ですが詳しく教えていただければ助かります

On 12月13日, 午後12:09, Nakakaze Ichiro <nakakaze_ich...@yahoo.co.jp>
wrote:


> 念のため、> > > int test=0
> > > > startActivityForResult(intent, test);
>
> > > > Log.d ( "ABC",String.valueOf(test));
>
> では、
> 「test」の値は、ゼロから変わりませんので、、
>
> アルゴロード
>

> --- On Tue, 2011/12/13, Nakakaze Ichiro <nakakaze_ich...@yahoo.co.jp> wrote:
>
>
>
> > ここへ、返信していいのでしょうか?
> > 戻り値=0は、キャンセルですね。
>
> > 私の場合、呼び出し先のアクティビティの起動タイプ(?)を
> > シングルタスクだったかシングルインスタンスにしていたので
> > キャンセルされていました。
>
> > もし、該当しているならスタンダードで起動してみてはいかがでしょうか?
>
> > アルゴロード
>

> > --- On Tue, 2011/12/13, 田代透 <toru2...@gmail.com> wrote:
>
> > > startActivityForResult で呼び出したアクティビティのリザルトは
>
> > > onActivityResult メソッドで受け取ります。

> > >http://developer.android.com/intl/ja/reference/android/app/Activity.h...


>
> > > ただ、DIALERアクティビティがそれぞれの状態を返すリザルトを返すとは限らないので試してみてください。
> > > だめなら、コンテントプロバイダの CallLog.Calls.CONTENT_URI を使って通話履歴を取ることもできると思います。
> > > ただ、通話中なのか通話完了なのかなど、判断が必要だと思います。
>

> > > 2011年12月12日23:42 And-Y <yumeoibi...@yahoo.co.jp>:

> > > > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
> > > --
> > > --
> > > Toru Tashiro
> > > toru2...@gmail.com
>

> > > --
> > > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > > このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> > > 詳細については、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からこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Nakakaze Ichiro

unread,
Dec 13, 2011, 8:18:58 PM12/13/11
to android-g...@googlegroups.com
こんにちは、1)「スタンダードで起動」==>ここを紹介していいかどうかわかりませんが、、、https://sites.google.com/a/techdoctranslator.com/jp/android/guide/manifest/activity-element#lmode
2)以下のように、、onActivityResult内で戻り値を判定します。いろいろ試していただけませんでしょうか?ちなみに、startActivityForResultの第二引数は起動するタスクへのコマンド識別コードになるのですが、電話には関係するかどうか不明です。
「public class Project_144 extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main); -----------------        AAA(v);    }        public void AAA(View view) {        int test=0;             Intent intent = // 直接電話をかける            new Intent(Intent.ACTION_CALL,Uri.parse("tel:117"));

            // アクティビティーの起動//            startActivity(intent);        startActivityForResult(intent, test);
        Log.d("Project_144","ABC:"+String.valueOf(test));

    }// End void AAA(View view)
    @Override    protected final void onActivityResult(int req, int result, Intent data) {// 正常終了はRESULT_OK(= -1)です。    if ( result == RESULT_OK ) {        Log.d ( "Project_144","OK:"+String.valueOf(result));//                   電話から戻った後にやりたいこと、を書く    }else{        Log.d ( "Project_144","NG:"+String.valueOf(result));  }    super.onActivityResult(req, result, data);   }}」実行してみましたが、キャンセルで返ってしまうみたいですね。
3)「アルゴロード」==>サインです。
深入りしてすみません。初期の質問からズレてしまっていそうで、、
アルゴロード

Nakakaze Ichiro

unread,
Dec 14, 2011, 12:07:54 AM12/14/11
to android-g...@googlegroups.com
こんにちは、再度送ります。(どうも先のテキストが不正だったようで、)1)「スタンダードで起動」==>ここを紹介していいかどうかわかりませんが、、、https://sites.google.com/a/techdoctranslator.com/jp/android/guide/manifest/activity-element#lmode

2)以下のように、、onActivityResult内で戻り値を判定します。いろいろ試していただけませんでしょうか?ちなみに、startActivityForResultの第二引数は起動するタスクへのコマンド識別コードになるのですが、電話には関係するかどうか不明です。
「public class Project_144 extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    -----------------        AAA(v);    }        public void AAA(View view) {        int test=0;             Intent intent = // 直接電話をかける            new Intent(Intent.ACTION_CALL,Uri.parse("tel:117"));
            // アクティビティーの起動//            startActivity(intent);        startActivityForResult(intent, test);
        Log.d("Project_144","ABC:"+String.valueOf(test));
    }// End void AAA(View view)
    @Override    protected final void onActivityResult(int req, int result, Intent data) {//    正常終了はRESULT_OK(= -1)です。    if ( result == RESULT_OK ) {        Log.d ( "Project_144","OK:"+String.valueOf(result));//                   電話から戻った後にやりたいこと、を書く    }else{        Log.d ( "Project_144","NG:"+String.valueOf(result));    }        super.onActivityResult(req, result, data);   }}」実行してみましたが、キャンセルで返ってしまうみたいですね。
3)「アルゴロード」==>サインです。深入りしてすみません。初期の質問からズレてしまっていそうで、、
アルゴロード

Nakakaze Ichiro

unread,
Dec 14, 2011, 12:15:11 AM12/14/11
to android-g...@googlegroups.com
すみません。テキストを貼りました。
text.txt

And-Y

unread,
Dec 14, 2011, 10:01:37 AM12/14/11
to 日本Androidの会

Nakakaze Ichiro 様 こんばんは、お手数かけます

12月12日, 午後11:42 に投稿したコードに教えて頂いたコードを追加
してみました

Logに返ってくるのはおっしゃる通り0でしたが
protected final void onActivityResultは、Activityが終了した時点で
返ってくるイベントみたいに想いました 合ってますか?

ただ相手が話中の場合すぐに終了して0を返します
呼び出し中は、応答し通話終了後に返ってきました

時間差をうまく利用すれば、相手が話中かどうか?だけでも判断出来るのかな?
とそんな事を想いました

後、応答やっぱり欲しいです^^


>ここを紹介していいかどうかわかりませんが
> https://sites.google.com/a/techdoctranslator.com/jp/android/guide/manifest/activity-element#lmode

勝手に翻訳 ですよね?^^
私には、本家よりこちらの方が理解しやすいです^^ でもまだ理解してないです^^
時間かかりそうです

アルゴロード サインでしたか アルゴリズム、手順みたいなのを想像してました
松田聖子 AKB48 とかの意味ですね? 了解です^^


なんだかお忙しそうな感じのとこ時間をとって頂いてうれしいです
コードはこんな感じで理解しましたが合ってますか


package an.doro144;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

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

}// End onCreate ----------------------------

// main.xmlでボタンイベント起動を記載している
public void AAA(View view) {
int test=0;

Intent intent = // 直接電話をかける

new Intent(Intent.ACTION_CALL,Uri.parse("tel:117"));

// アクティビティーの起動
//startActivity(intent);
startActivityForResult(intent, test);

Log.d ( "ABC","初回"+String.valueOf(test));

}// End void AAA(View view)


@Override // 教えていただいたコードの追加分


protected final void onActivityResult(int req, int result, Intent

data) {//正常終了はRESULT_OK(= -1)

if ( result == RESULT_OK ) {

Log.d ( "ABC","OK:"+String.valueOf(result));//電話から戻った後にやりたいこ
と、を書く
}
else{
Log.d ( "ABC","NG:"+String.valueOf(result));
}// End if

super.onActivityResult(req, result, data);

}//onActivityResult


}// End Activity

田代透

unread,
Dec 14, 2011, 4:52:49 PM12/14/11
to android-g...@googlegroups.com
onActivityResultは、startActivityForResult呼び出したアクティビティが終了するときに返すコードを受け取るメソッドです。

 通話が通じている間は、通話アクティビティが生きているのでリザルトは還ってこず
通話が終了してアクティビティが終了した時点でリザルトが帰ってきます。
話し中の場合にはそれでアクティビティが閉じられるのですぐに還ってくるのだと思います。

 返ってくるコードが正常に通話でも話し中でも変わらぬ情報が(インテントに付加されるデーターも含めて)戻ってくるのなら、
リザルトが来た所でコンテンツプロバイダーに呼び出した電話番号で情報を問い合わせれば、
通話が成功したのか話し中だったのかの確認も出来るかと思います。


2011年12月15日0:01 And-Y <yumeo...@yahoo.co.jp>:

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

--
--
Toru Tashiro
toru...@gmail.com

Nakakaze Ichiro

unread,
Dec 14, 2011, 10:54:44 PM12/14/11
to android-g...@googlegroups.com
こんにちは、
田代さん、ありがとうございます。

添付のようなことなのだと思います。(実験用onActivityResult)
http://developer.android.com/reference/android/provider/CallLog.Calls.html
が参考になりますね。

いろいろ通話を変えて試行してみてはいかがでしょう。
CallLog.Calls.DURATIONがゼロだと通話していないようですが、、
自己責任でお願いします。(えらいスマンこって)

アルゴロード

20111215.txt

やまだ

unread,
Dec 15, 2011, 3:43:01 AM12/15/11
to 日本Androidの会
TelephonyManagerとPhoneStateListenerのonCallStateChangedで通話の開始、終了くらいは取れると
思います。
相手が通話中かまで取れるかはわかりませんが。。。

上記のキーワードでググッて見てください。
サンプルコードがあるはずです。

And-Y

unread,
Dec 15, 2011, 7:49:09 AM12/15/11
to 日本Androidの会
田代様 こんばんは^^

ありがとうございます

startActivityForResultはコードを受け取るメソッドたしかにそのように感じました
話中だった場合画面の動きとしてもすぐに終了します

終了のメソッドでも時間差で話中が判断できそうだとな昨夜そんな事を想いました

コンテンツプロバイダーの情報取り出しのコードはどう書き込めばいいでしょうか?

最初に教えて頂いた
>startActivity ではなく startActivityForResult を使ったら何かコードが帰って来ませんか?

の使い方はこの事だったんだな? と悟ったしだいです^^

なにぶん例えば startActivityForResult( )の括弧の中の引数の型、個数をどう書き込めば?
のスキルです


ありがとうございます^^

And-Y

unread,
Dec 15, 2011, 7:52:04 AM12/15/11
to 日本Androidの会
Nakakaze Ichiro 様 こんばんは^^


http://developer.android.com/reference/android/provider/CallLog.Calls.html

うわあ~ 本家が出てきた~ 頑張ってみます^^


CallLog.Calls.DURATION も検索してみたら結構Hitしましたのでさぐってみたいと思います


ありがとうございます^^

And-Y

unread,
Dec 15, 2011, 7:58:41 AM12/15/11
to 日本Androidの会
やまだ様 こんばんは^^ お手数おかけいたします

TelephonyManagerは質問を投稿する前に調べてました

これは相手への発信した状態でなく自分の携帯の着信と通話と待受けでした
こちらから発信した場合相手が応答しているいないに関わらずすぐに
通話中のイベントが返ってきました

onCallStateChangedありがとうございます^^

検索してみます 相手が応答した場合に的をしぼってみます


ありがとうございます^^

田代透

unread,
Dec 15, 2011, 8:54:50 AM12/15/11
to android-g...@googlegroups.com
startActivityForResultのパラメーターは2個
1個はActivityを起動するときのパラメーターを渡すIntentでこれはStartActivityと一緒で
2個目のパラメーターはどのアクティビティで呼び出した返事なのかを識別するために使います。

たとえば二種類のActivityを呼び出すActivityが有ったとするとそれぞれのActivityを呼び出すのは
StartActivityForResult(intentA, 0);
StartActivityForResult(intentB, 0);
と言った具合に一意に書けますけど、Resultが戻って受け取るのは

onActivityResult 1つだけです。
どっちのActivityから戻ってきたのかはこのメソッドが呼び出されただけでは区別がつきません。
で、StartActivityForResultの2番目のパラメータが役に立ちます。

onActivityResultメソッドのパラメーターは3個
protected void onActivityResult(int requestCode, int resultCode, Intent data)
この一つ目のrequestCodeにStartActivityForResultの2番目のパラメーターで設定した値が帰ってきます

StartActivityForResult(intentA, 0);
StartActivityForResult(intentB, 1);

の2つの呼び出しがあったとするとrequestCodeには

intentAで呼び出されたActivityからのResultの場合には0が
intentBで呼び出されたActivityからのResultの場合には1が入ります。

このrequestCodeを使ってどちらから帰ってきたのかを識別して
それぞれから帰ってきた流れのコードを書くことが出来るわけです。

二番目のパラメーターのresultCodeはActivityが返す整数型のコードです。
呼び出されたActivityは setResilt(int resultCode) か setResult(int resultCode,
intent data) をつかって
呼び出し元のActivityにresultCodeを知らせます。例えば
RESULT_OK(-1)でActivityが正常終了したとか
RESULT_CANCELED(0)でActivityがキャンセルされたとか。
呼び出すActivityと呼び出されるActivityのお約束をしておけば整数の値を割り振っておけば
このコードだけで複数の状態を返すことも出来ます。

Activityの状態を知りたいだけならresultCodeを見れば良いのですけど、Activityが何か値を帰す場合、
特に整数だけで表せずに、文字列とかその他のものを返したいときには
三番目のパラメーターのintent dataが使用されます。
呼び出されたActivityはsetResult(int resultCode, intent data)を使用してintentとして値を返し、
onActivityResultで受け取れるわけです。

ダイアラーを呼び出した結果のresultCodeが通話に成功した場合、話し中だった場合などで異なるコードが
帰ってきたり、なにかintentが付加されていたりはしないかってところを期待したわけですけど。

http://developer.android.com/intl/ja/reference/android/content/Intent.html#ACTION_CALL
であっさりと
Output:no
となってますね(汗

onActivityResultが呼び出されない限りは、dialerがなにか仕事をしているので、呼び出し元Activityとしては
通話中/呼び出し中であることが判断できて、戻ってきた所で、
かけた電話番号でコンテンツプロバイダで通話履歴を調べて通話の結果を調べる…という手段となりますかね。

あまり、答にはなっていなくてすみません。

2011年12月15日21:52 And-Y <yumeo...@yahoo.co.jp>:

田代透

unread,
Dec 15, 2011, 7:18:39 PM12/15/11
to android-g...@googlegroups.com
あー、的外れな説明をしてしまったようで申し訳ありません。

ちょっと試してみましたが、CALLのresultは通話が成功しても失敗しても 0 が返ってきて data も添付されていませんでした。

やはり通話アプリが終了しresultが返ってきた段階で、呼び出し番号の通話記録を取り出し、その最新が通話時間0秒か否かで
判断するしかないかもしれません。通話時間が0秒出なければ、いちおうつながったということで
(コール中にオンフックしても0秒ですけど通話としての意味は無いということで話中と同じ扱いでよいかと)

しつれいたしました

2011年12月15日22:54 田代透 <toru...@gmail.com>:

やまだ

unread,
Dec 15, 2011, 7:53:53 PM12/15/11
to 日本Androidの会
既に検索していたらお気づきかと思いますが、
PhoneStateListenerをTelephonyManagerに登録する形で使用するので
どちらも必要となります。
下記をonCreateに記載することで通話状態が取れると思います。
他にも取れるステータスがあったら、ハンドリングしたいものをcase文に追加すればいいです。

TelephonyManager tm =
(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener psListener = new PhoneStateListener() {
public void onCallStateChanged(int state, String number) {
switch(state) {
case TelephonyManager.CALL_STATE_RINGING://鳴っている状態
break;
case TelephonyManager.CALL_STATE_OFFHOOK://電話に出た
break;
case TelephonyManager.CALL_STATE_IDLE://通話終了
break;
}
}
};
tm.listen(psListener, PhoneStateListener.LISTEN_CALL_STATE);

Nakakaze Ichiro

unread,
Dec 15, 2011, 11:57:43 PM12/15/11
to android-g...@googlegroups.com
こんにちは、
では、武運をお祈りします。

アルゴロード

And-Y

unread,
Dec 17, 2011, 9:06:48 AM12/17/11
to 日本Androidの会
田代様

色々とお骨折りいただき感謝いたします
Activityのイベントこれだけ書込みして頂くと良く理解できそうです時間をかけて
1行1行読み解いてみたいと思います

>あー、的外れな説明をしてしまったようで申し訳ありません。

いえとんでもありませんこれから先私にはすごく重要になる事ばかりです
だけど終了イベントでも時間差攻撃すれば話中が確認できそうだと言う事は捨てがたいです^^

でもやはり現在進行形の相手が応答した場合のイベントは難しいのでしょうかね?

電話が終了した上で履歴で成功してたかいなかをさぐるしかないのかな?てそんな感じです

And-Y

unread,
Dec 17, 2011, 9:31:30 AM12/17/11
to 日本Androidの会
やまだ様

こうやってサンプルコードを提示して頂くとすごく嬉しいです^^

相手からかかってきた場合の自分の状態
CALL_STATE_RINGING://鳴っている状態
CALL_STATE_OFFHOOK://電話に出た
CALL_STATE_IDLE: //通話終了

この3つにつきましては、こちらに質問する前に確認していました

CALL_STATE_OFFHOOK://自分が電話に出た
このイベントに加えて

CALL_****:// こちらから電話して相手が応答した

のイベントが欲しくて質問をした次第でありますが

やまだ様のコメントでもしかしてと想い

重複とEclipsが
DATA_ACTIVITY_IN:
DATA_ACTIVITY_NONE:
DATA_ACTIVITY_OUT:
などと教えてくれてるので重複しないものを集めてやってみてます^^

なんかあればいいな?て感じです^^

結果が出るまでもう少し時間かかりそうです

And-Y

unread,
Dec 17, 2011, 9:38:40 AM12/17/11
to 日本Androidの会
Nakakaze Ichiro 様 こんばんは

ありがとうございます^^ おぼろげですが応答イベントはもしかして無いのかな?
て頭をよぎります

T 2

unread,
Feb 8, 2012, 10:00:03 AM2/8/12
to 日本Androidの会
And-Y様
ご質問に重ねることとなって申し訳ございません。

And-Y様と同じように電話の発着信のイベントトをトリガに他のActivityを呼び出す形で
処理を行うアプリの実装を検討しております。、

WEB等の情報を調べてはいるのですが、
>PhoneStateListenerをTelephonyManagerに登録する形
でActivityの中でイベントを取得することはできたのですが
常駐サービスの中でそのイベントを取得することができずに困っております。

もし対応方法をご存知でしたらお知恵を拝借できれば幸いです。

宜しくお願い致します。

Tomoki Iwai

unread,
Feb 9, 2012, 3:31:34 AM2/9/12
to android-g...@googlegroups.com
特別な対応方法は必要ないのでは?と思います。
サービスがうまく起動していない or 常駐していないという可能性はないでしょうか?
(マニフェストにサービスを記載し忘れたとか、bindServiceで起動しているとか…)

ざっくりと下記の実装で動作は確認できました。
・API Level 9
・エミュレータ
・ActivityからContext#startServiceを利用してサービス起動
・Serviceクラスを継承したローカルサービスとして作成
・サービスではonCreateのタイミングでPhoneStateListener.LISTEN_CALL_STATEをlisten
・リスナーではonCallStateChangedをオーバーライドしToastを表示

くりむぞん

unread,
Feb 10, 2012, 12:46:40 AM2/10/12
to 日本Androidの会
iwai様
ご丁寧にアドバイスただきましてありがとうございます。
その後も試してみたのですがToast.表示までたどり着けていない状態です。

誠に申し訳ないのですがソースをアップロードして
内容をご確認いただきご助言いただく事は可能でしょうか。
お手数をお変えして申し訳ございませんが、ご対応いただけますと
非常に助かります。

以上、宜しくお願い致します。

Tomoki Iwai

unread,
Feb 10, 2012, 1:51:58 AM2/10/12
to android-g...@googlegroups.com
くりむぞん様

ソースを拝見致しました。
下記2点が問題となっており、これらを修正することで期待通りの動作となります。

・パーミッション設定が不足している
下記をマニフェストに追記すればOK
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

・Serviceクラスの子クラス(StartActivityServiceクラス)でonCreate()のオーバーライドができていない
onCreateでリスナー登録をされていますが、onCreateメソッドの定義が間違っているため
オーバーライドできていません。(呼び出されていません)

誤)onCreate(Bundle savedInstanceState)
正)onCreate()

※蛇足ですが、2番目のミスは@Overrideアノテーションで防ぐことが可能です。

くりむぞん

unread,
Feb 13, 2012, 8:53:30 PM2/13/12
to 日本Androidの会
iwai様
ご指摘いただき誠にありがとうございます。

おかげさまで、着信時・通話開始時・通話終了時のタイミングで
ログに吐き出させる事まではできました。

少し話が変わってしまうのですが、
StartActivityServiceクラス内でmediarecorderでの録音をしたいと
考えているのですが、うまく動かず困っております。

ご指摘頂いた点以外はほとんど変えておりませんが再度
ソースをアップロードしますのでお手隙の際に
ご助言いただければ幸いです。

ソースダウンロード用URL http://kie.nu/4Qj

お手数ですが宜しくお願い致します。
Reply all
Reply to author
Forward
0 new messages