10

独自の通話処理 UI を実装しようとしています。

やりたいことは、電話がかかってきたら着信番号と画像を表示し、ボタンを押せば着信に応答できるようにしたいです。

関連するコードは次のとおりです。

 @Override
  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    answerButton = (Button) findViewById(R.id.pickup);
    answerButton.setOnClickListener(new OnClickListener() {
        public void onClick(final View v) {
            Intent intent = new Intent("android.intent.action.ANSWER");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);          
        }
    });

悲しいことに、コードは機能しません。まず、回答ボタンを押すと例外がスローされます。

ActivityNotFoundException: Intent を処理するアクティビティが見つかりません {
act=android.intent.action.ANSWER

次に、AndroidManifest.xml に次のエントリを追加しました。

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

アプリを再度実行すると、例外はなくなりました。ただし、着信が実際に受け入れられないのではないかと思います。Androidの画面応答ボタン(緑色のボタン)を押すと、着信が受け入れられ、エミュレータ画面の左上隅に緑色の通話中アイコンも表示されますが、アプリは表示されません。

Androidソースで電話アプリのソースコードも読みました。Phone クラスには acceptCall() などのメソッドがあります。しかし、これらのコードは、次のような多くのインポート宣言があるため、私には使いにくいようです。

import com.android.internal.telephony.Call;
import com.android.internal.telephony.CallStateException;
import com.android.internal.telephony.CallerInfo;
import com.android.internal.telephony.CallerInfoAsyncQuery;
import com.android.internal.telephony.Connection;
import com.android.internal.telephony.MmiCode;
import com.android.internal.telephony.Phone;

そして、これらのインポートをコードに追加すると、 : などのエラーが多すぎます
The import com.android.internal.telephony cannot be resolved

私の問題に対する正しくて簡単な方法は何ですか?

4

5 に答える 5

1

カテゴリ「android.intent.category.DEFAULT」を追加 ( Intent.CATEGORY_DEFAULT)

于 2010-05-07T06:57:11.150 に答える
1

The intent android.intent.action.ANSWER is somehow not working as expected. There is a workaround by emulating the bluetooth button to answer the incoming call. You can see an example from auto-answer project.

于 2011-05-19T03:31:58.263 に答える
0

電話が鳴ったときにイベントを取得するブロードキャスト レシーバーを作成する必要があります。その後、目的のアクティビティを起動できます。CUSTOM ROM を使用するまで、デフォルトの着信画面を置き換えることはできません。また、マニフェスト ファイルでブロードキャスト レシーバーの優先度を設定することを忘れないでください。イベントを取得したら、リフレクションを使用して ITelephony のオブジェクトを使用できます。これにより、呼び出しに応答または拒否する方法が提供されます。

于 2012-01-02T03:19:51.673 に答える
0

これはcom.android.internal.telephonyパッケージを使用して可能ですが、Eclipse でこのメソッドを使用する方法を見つける必要があり、Android ソース コードを使用してアプリをシステム アプリとしてコンパイルする必要があります。

于 2012-06-18T01:39:38.757 に答える