拨打电话号码列表并返回活动

Posted

技术标签:

【中文标题】拨打电话号码列表并返回活动【英文标题】:call a list of telephonenumbers and go back to the activity 【发布时间】:2016-07-28 11:19:28 【问题描述】:

我想调用数组中的一些数字。所以我把它们放在一个循环中,并从调用应用程序的意图开始。使用 phonecalllistener 通话结束后我会回到我的活动,但我的问题是循环从头开始,我必须再次单击按钮。

我可以用 Bundle 解决这个问题吗?如何? Activity 重新启动时如何保存我的循环状态?

我还在清单中写了正确的权限(CALL_PHONE 和 READ_PHONE_STATE)

public class MainActivity extends Activity 

final Context context = this;

private Button button;
public int g = 0;
public String[] nummern = new String[10];


public void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.buttonCall);
    nummern[0] = "tel:06746468156";
    nummern[1] = "tel:06991046460";
    nummern[2] = "tel:06504146464";

    PhoneCallListener phoneListener = new PhoneCallListener();
    TelephonyManager telephonyManager = (TelephonyManager) this
            .getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);

    // add button listener
    button.setOnClickListener(new OnClickListener() 

        @Override
        public void onClick(View arg0) 
                for (g = 0; g <= nummern.length-1; g++) 

                    Intent callIntent = new Intent(Intent.ACTION_CALL);

                    callIntent.setData(Uri.parse(nummern[g]));
                    startActivity(callIntent);

                


        

    );



private class PhoneCallListener extends PhoneStateListener 

    private boolean isPhoneCalling = false;

    String LOG_TAG = "LOGGING 123";


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

        if (TelephonyManager.CALL_STATE_RINGING == state) 
            // phone ringing
            Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
        

        if (TelephonyManager.CALL_STATE_OFFHOOK == state) 
            // active
            Log.i(LOG_TAG, "OFFHOOK");

            isPhoneCalling = true;
        

        if (TelephonyManager.CALL_STATE_IDLE == state) 
            // run when class initial and phone call ended,
            // need detect flag from CALL_STATE_OFFHOOK
            Log.i(LOG_TAG, "IDLE");

            if (isPhoneCalling) 

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

                // restart app
                Intent i = getBaseContext().getPackageManager()
                        .getLaunchIntentForPackage(
                                getBaseContext().getPackageName());
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);

                isPhoneCalling = false;
            

        
    

【问题讨论】:

只需保存您的循环状态,或已拨打的电话号码 Activity 重新启动时如何保存我的循环状态? 如果我理解您的代码正确,您在通话结束后重新启动应用程序?你为什么这么做 ?您可以从那里拨打下一个号码,而不是重新启动应用程序 【参考方案1】:

从您的按钮单击侦听器中,调用 startActivityForResult (Intent intent, int requestCode),第一个数字应作为意图数据传递,一旦调用完成,“onActivityResult(int requestCode, int resultCode, Intent data)”方法将被调用并通过这种方法,您可以再次启动活动。您可以相应地应用逻辑。

【讨论】:

以上是关于拨打电话号码列表并返回活动的主要内容,如果未能解决你的问题,请参考以下文章

安卓手机端实现点击电话号码,出现拨打复制保存到通讯录

950电话能拨打吗?

在没有 alertView 的情况下使用 UIWebView 在 iOS 中以编程方式拨打电话

FreeSWITCH 怎么连接外网的线路并拨打电话啊

“你拨打的电话是空号”,是怎么回事?

如何使电话文本字段可点击并能够拨打电话? (泥浆)