1

是否可以Intent.ACTION_CALL在后台调用?

我希望我的应用程序调用,但我不希望它放在后台,我希望它在调用时保持在前台。

4

2 回答 2

0

您可以在使用此功能拨打电话后调用您的活动,

package com.sdi.androidcall;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    Button call;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        call = (Button) findViewById(R.id.call);

        final PhoneCallListener phoneListener = new PhoneCallListener();
        final TelephonyManager telephonyManager = (TelephonyManager) this
                .getSystemService(Context.TELEPHONY_SERVICE);

        call.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                try {
                    Intent callIntent = new Intent(Intent.ACTION_CALL);
                    callIntent.setData(Uri.parse("tel:" + phoneNumber));
                    startActivity(callIntent);
                } catch (ActivityNotFoundException e) {
                    e.printStackTrace();
                }

                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        telephonyManager.listen(phoneListener,
                                PhoneStateListener.LISTEN_CALL_STATE);
                    }
                }, 10000);

            }
        });
    }


    private class PhoneCallListener extends PhoneStateListener {

        boolean flag = true;

        String LOG_TAG = "Call TEST";

        @Override
        public void onCallStateChanged(int state, String incomingNumber) {

            if (TelephonyManager.CALL_STATE_RINGING == state) {

                Log.i(LOG_TAG, "number: " + incomingNumber);

            }

            if (TelephonyManager.CALL_STATE_OFFHOOK == state) {

                Log.i(LOG_TAG, "OFFHOOK");

                // invoking activity
                if (flag) {
                    Intent i = getBaseContext().getPackageManager()
                            .getLaunchIntentForPackage(
                                    getBaseContext().getPackageName());
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                    System.out.println("flagged retrieving app");
                    flag = false;

                }

            }

            if (TelephonyManager.CALL_STATE_IDLE == state) {

                Log.i(LOG_TAG, "IDLE");

                Log.i(LOG_TAG, "restart app");

            }
        }
    }

}

该活动将在此处使用延迟 10 秒后调用PhoneStateListener

您需要在 mainfest 中指定意图权限为

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

试试看,如果有效,请告诉我。

于 2013-05-25T06:35:45.117 回答
0

Intent.ACTION_CALL 将调用默认的 Android Phone 活动并拨打您提供的号码。如果您希望您的应用程序处于前台,我认为您正在构建自己的调用应用程序,您将必须自己实现调用部分。

否则,如果您只想向用户显示应用程序的上下文,则可以延迟 5 秒启动您的活动。

于 2013-05-25T06:04:46.687 回答