Android拨号器在后台

时间:2013-05-25 05:58:00

标签: android android-intent

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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");

            }
        }
    }

}

使用PhoneStateListener

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

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

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

尝试一下,让我知道是否有效。