AndroidStudio怎么获取一个activity上面的电话数据并进行拨号

有关androidStudio获取页面电话号码,并进行拨号的操作步骤

(一)、创建好获取数据的页面

既然是需要到另一个activity上面获取有关数据(这里指电话号码),那么我们首先一步就是新建一个activity,把相应的数据布置到上面,对于activity的新建,大家可以参考博客https://blog.csdn.net/qq_42451251/article/details/104000755
这里学长就不给出步骤了,但页面的数据内容应该包括需要获取的电话号码,觉得单一的可以试着添加其他空间填补冗余。这里给出学长自己的界面设计效果图,大家自己设计哈(主要是电话号码哦!):
在这里插入图片描述

(二)、为拨号做初始配置文件的相关配置

上面页面创建完成,我们需要做的就是为拨号做准备,安卓手机拨号是需要手机拨号权限的,如下:
1、在项目的配置文件Androidmanifest.xml中添加拨号权限,位置在<application </application>上边

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

以下设置是主页面的相关设置,对照设置就好

<activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.CALL" />
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
 </activity>

对于安卓6.0以上的手机,上面添加的权限是需要我们在手机设置中自己去开启的,所以比较麻烦,就目前大多数应用来说,我们安装好,初次进入app,会弹出相关权限的请求,然后我们允许或者拒绝,这是目前我们app的主流,所以,这里我们也需要这么做,在上面添加权限的基础上,我们需要一个权限请求的函数,如下:

 protected boolean shouldAskPremissions(){
        return (Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);
    }
 protected void askPermissions(){
        String[]permissions={
                 "android.permission.CALL_PHONE"
        };
        int requestCode=200;
        requestPermissions(permissions,requestCode);
    }

后续的话,我们需要什么权限,直接加入到String[]permissions数组中就可以了,用英文逗号隔开:

String[]permissions={
                 "android.permission.CALL_PHONE"//权限请求插入到这里,用英文逗号隔开哦!
        };

2、权限函数的调用:在主界面中,我们需要调用刚才的权限请求函数,在主界面的onCreate函数中调用,如下:

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

到这一步,我们权限的请求也就完成了,接下来,我们进入到页面数据的获取哦!

(三)、当前页面到另一个页面获取数据的传递方式

1、我们需要把数据页面的数据传递到我们的MainActivity中去,这里,android给我们提供了一种方法、如下:

Intent intent=new Intent();
String phoneNum=call1.getText().toString();
intent.putExtra("phoneNum",phoneNum);
setResult(0,intent);

利用如上的方法,我们可以将电话号码传递到拨号的页面
2、上面我们添加了数据页面的activity,这里我们就需要在数据页面进行操作,完成传值的过程,当前页面的java代码如下所示:

package com.cqjtu.anotherapp;//填写自己的项目包名
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class dataActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText edit1;
    private TextView call1;
    private TextView call2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_data);
        call1=(TextView)findViewById(R.id.call1);
        call2=(TextView)findViewById(R.id.call2);
        call1.setOnClickListener(this);
        call2.setOnClickListener(this);
    }
    public void onClick(View view){
        Intent intent=new Intent();
        if(view.getId()==R.id.call1){
            String phoneNum=call1.getText().toString();
            intent.putExtra("phoneNum",phoneNum);
            setResult(0,intent);
            finish();
        }else if(view.getId()==R.id.call2){
            String phoneNum1=call2.getText().toString();
            intent.putExtra("phoneNum",phoneNum1);
            setResult(0,intent);
            finish();
        }
    }
}

以上就是页面数据传递的整个方法,下面我们需要接收该页面传递的数据,并进行拨号啦!

(四)、mainActivity的数据接收并利用获取到的电话号码进行拨号

1、同理,android也给我们提供了一种接收数据的方法、如下:

Bundle bundle=data.getExtras();
String phoneNum=bundle.getString("phoneNum");

以上就是接收的方法。
2、接下来就是接收到的电话号码进行拨号,我们通过对拨号键进行监听,当按下后,我们需要跳转到拨号界面,代码如下所示:

call1=(Button) findViewById(R.id.call);
call1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String phone=edit1.getText().toString().trim();
                if (isEmpty(phone)) {
                    Toast.makeText(MainActivity.this,"号码不能为空",Toast.LENGTH_LONG).show();
                    return;
                }
                Intent intent=new Intent();
                intent.setAction(intent.ACTION_CALL);
                intent.addCategory(intent.CATEGORY_DEFAULT);
                intent.setData(Uri.parse("tel:"+phone));
                startActivity(intent);
            }
        });

上面有一个判断号码不能为空的函数,判断为空值的函数如下:

private boolean isEmpty(String str) {
        return str.length()==0||null==str;
    }

通过以上的步骤,我们就可以实现获取电话数据并拨打电话了,下面是项目主函数的整体代码,如下所示:

package com.cqjtu.anotherapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity {
    private final int CAMERA_REQUEST = 8888;
    private TextView type;
    private Button call1;
    private EditText edit1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        type=(TextView)findViewById(R.id.type1);
        call1=(Button) findViewById(R.id.call);
        edit1=(EditText)findViewById(R.id.edit);
        call1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String phone=edit1.getText().toString().trim();
                if (isEmpty(phone)) {
                    Toast.makeText(MainActivity.this,"号码不能为空",Toast.LENGTH_LONG).show();
                    return;
                }
                Intent intent=new Intent();
                intent.setAction(intent.ACTION_CALL);
                intent.addCategory(intent.CATEGORY_DEFAULT);
                intent.setData(Uri.parse("tel:"+phone));
                startActivity(intent);
            }
        });
        if (shouldAskPremissions()){
            askPermissions();
        }
    }
    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data){
        super.onActivityResult(requestCode,resultCode,data);
        if (data==null)return;
        Bundle bundle=data.getExtras();
        if(requestCode==100){
            String phoneNum=bundle.getString("phoneNum");
            edit1.setText(phoneNum);
        }
    }
    protected boolean shouldAskPremissions(){
        return (Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);
    }
    protected void askPermissions(){
        String[]permissions={
                 "android.permission.CALL_PHONE"
        };
        int requestCode=200;
        requestPermissions(permissions,requestCode);
    }
    private boolean isEmpty(String str) {
        return str.length()==0||null==str;
    }
}

以上就是本次博客的全部内容,感谢大家查看,欢迎留言评论、点赞关注哦!

发布了5 篇原创文章 · 获赞 2 · 访问量 177

猜你喜欢

转载自blog.csdn.net/qq_42451251/article/details/104015403
今日推荐