0

次のコードを検討してください。

public void callPerson(String phonenumber){

    String tel = "tel:" + phonenumber;
    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(tel));

    startActivity(intent); 

    // onPause();

    // Toast.makeText(getActivity(), "this is a test toast", Toast.LENGTH_LONG).show();

}

ご想像のとおり、そのコードを実行すると、現在のアクティビティが一時停止し、後続のアクティビティ (ダイヤラー) が実行されます。電話が終わると、元のアクティビティが再び表示されます。

私の問題は、通話後にポップアップする「評価」ダイアログを導入したいときに発生します。

そのようなコードをどこに挿入しますか? さて、「startActivity(intent);」という行の直後に挿入すると、これは、最後の行 (トースト) のコメントを外すのと同じ (?) ことになります。これを行うと、「startActivity(intent);」行の後もコードが実行され続けることがわかります。-- 通話中にトーストが表示されます。

では、コードが実行され続けないようにするにはどうすればよいでしょうか。

「onPause()」も挿入しようとしたことがわかりますが、これも機能していないようです。

私は Android のライフサイクルを理解しているので、これを行う唯一の方法は、新しいダイアログ コードを onResume() に配置することですが、次のようなことも行う必要があります。

@Override
public void onResume(){

    if (we are currently returning from phone call) {

        //Dialog code here

    }

}

しかし、もっと良い方法があるに違いないようです。助けてくれてありがとう!

4

1 に答える 1

4

お気づきのように、startActivity() を呼び出しても、メソッド内の残りのコードの呼び出しは停止しません。あなたが提案している解決策は、あなたの問題に適しています。次のようなクラス変数を使用するだけreturningFromCallです。

public void callPerson(String phonenumber){

    String tel = "tel:" + phonenumber;
    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(tel));

    startActivity(intent); 

    returningFromCall = true;

}

そして、onResume メソッドで true かどうかを確認し、リセットします。

@Override
public void onResume() {
    if (returningFromCall) {
        showDialog();
        returningFromCall = false;
    }
}
于 2016-04-26T03:54:32.007 に答える