none
Android開発中に電話がかけられない RRS feed

  • 質問

  • http://download.microsoft.com/download/6/3/0/630CAB12-750B-4641-966A-A3F1C73F0BA6/XamarinHandsOn_Android.pdf

    上記のPDFを参考に、Visual StudioでAndroidを開発しています。

    ですが、MainActivity.csに入力したコードの

                callButton.Click += (object sender, EventArgs e) =>
                {
                    //// "Call" ボタンがクリックされたら電話番号へのダイヤルを試みます。
                    var callDialog = new AlertDialog.Builder(this);
                    callDialog.SetMessage("Call " + translatedNumber + "?");
                    callDialog.SetNeutralButton("Call", delegate
                    {
                        //// 電話への intent を作成します。    
                        var callIntent = new Intent(Intent.ActionCall);
                        callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber));
                        StartActivity(callIntent);
                    });
                    callDialog.SetNegativeButton("Cancel", delegate { });
                    //// アラートダイアログを表示し、ユーザーのレスポンスを待ちます。
                    callDialog.Show();
                };

    の部分で、一番下の「callDialog.Show();」の部分で「ハンドルされていない例外」が発生し電話をかけられませんでした

    (実機デバッグでは、アラートダイアログの「call」を押下したときにフリーズします)

    2017年11月27日 12:04

回答

すべての返信

  • 念のため。権限の設定の部分は対応されているという認識で問題ないですか?
    2017年11月27日 13:17
    モデレータ
  • KーTSさんは開発経験が浅いように思われましたので、Azuleanさんの補足をしておきます。

    プロジェクトのプロパティから「androidマニフェスト」を開き、「CALL_PHONE」にチェックが入っているか確かめてみて下さい。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2017年11月28日 0:29
    モデレータ
  • CALL_PHONEにチェック入っています

    エラーのログとして「ActivityLog.xml」が作成されたのですが、この内容をここに書いた方がよろしいですか?

    2017年11月28日 11:01
  • ActivityLog.xml というものは、Visual Studio の環境で起きた問題に関するログであり、作成されたプログラムの動作に関するログではありませんが…。

    ちなみに、デバッグ時に例外が出るとのことですがどんな例外か、例外の型名、メッセージなど、正確に書いてもらえませんか?

    2017年11月28日 21:52
    モデレータ
  • Unhandled Exception:

    Java.Lang.SecurityException: <Timeout exceeded getting exception details>

    という例外です。

    2017年11月29日 11:29
  • Runtime Permission 周りですかね?
    Android バージョン(API Level)はいくつですか?

    参考
    http://santea.hateblo.jp/entry/2016/03/29/201424

    2017年11月29日 13:08
    モデレータ
  • 「最新のプラットフォームを使用します(Android 7.1 (Nougat))」です。

    添付先のようなAPIバージョンの欄は存在しなく「詳細情報」とだけ書かれていたためAPIバージョンはわかりませんが、

    Android 7.1ですから多分24かと思われます。

    2017年11月29日 20:22
  • そうであれば、Runtime Permission(実行時に権限を要求する)に対応していかないといけないでしょう。https://www.xlsoft.com/jp/products/xamarin/introduction-to-marshmallow.html#permissions

    2017年11月29日 21:52
    モデレータ
  • https://qiita.com/YAmi/items/018292fdcbdde5b4d8d1

    ここを見ながら権限を要求するコードを書き加えてみて、「callDialog.SetNegativeButton("Cancel", delegate { });」と「 callDialog.Show();」の間に

                    ////権限がない場合
                    if (CheckSelfPermission(Android.Manifest.Permission.CallPhone) != Android.Content.PM.Permission.Granted)
                    {
                        RevokeUriPermission(new string[] { Android.Manifest.Permission.CallPhone },XXX );
                     }

    と書き加えるところまで行きました。しかし、「XXX」部分に何をかくべきかがわかりませんでした。

    2017年11月30日 12:22
  • Revoke は「無効にする」とか「取り消す」といった意味なので、使うメソッドを間違えているかと。
    Request で始まる方を選んでください。

    末尾の requestCode は、私自身は詳しくないので想像ですが、自分の識別用のコードであって、任意では?

    2017年11月30日 13:27
    モデレータ
  • 正しく電話をかけることができました

    ありがとうございました

    2017年12月1日 12:40
  • KーTS さん、こんにちは
    フォーラム オペレーターの立花楓です。
     
    本件について問題が解決したようで何よりです。

    Azulean さんから寄せられた情報がご参考になりそうな情報だと思われましたので「回答としてマーク」とさせていただきました。

    宜しくお願いいたします。


    MSDN/TechNet Community Support 立花楓




    2017年12月4日 2:37
    モデレータ