Android小应用之拨号器

首先看一下Android Studio下怎么设置应用的ICON

image

image

Activity的onCreate()方法

当界面刚被创建时会回调此方法,super.onCreate()执行父类的初始化操作,必须要加上。

界面设计:

image

分析:

TextView

Edit

RelativeLayout:相对布局

在字符串上用"Alt+Enter"可以Extract资源。

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/title"/>

@string是引用字符串资源里面的变量,避免硬编码,方便国际化。

两个title不会冲突,因为存在于不同的内部类中。

按钮事件

打开另一个Activity

Intent

Intent的常量ACTION

添加拨打电话的权限

package com.example.tuhooo.callyou;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

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

    /**
     * 拨打此号码的按钮被点击时触发
     * @param v 视图
     */
    public void call(View v) {

        System.out.println("进入拨号按钮回调......");
        EditText editNumber = (EditText) findViewById(R.id.number);
        String phoneNumber = editNumber.getText().toString();

        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_CALL);  // 指定其动作为拨打电话
        String param = "tel:" + phoneNumber;
        System.out.println("拨号参数为:" + param);
        intent.setData(Uri.parse(param));  // 指定将要拨出的号码

        try {
            startActivity(intent);  // 执行打电话的
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

即使这样写仍会报错,因为在Android 6.0对权限管理进行修改了。

下面上网上找了一段可行的代码:

package com.example.tuhooo.callyou;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * 拨打此号码的按钮被点击时触发
     * @param v 视图
     */
    public void call(View v) {

        System.out.println("进入拨号按钮回调......");
        
        if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            // 没有获得授权, 申请授权
            if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.CALL_PHONE)) {
                Toast.makeText(MainActivity.this, "请授权!", Toast.LENGTH_LONG).show();
                Intent applyIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", getPackageName(), null);
                applyIntent.setData(uri);
                startActivity(applyIntent);

            } else {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE);
            }
        } else {
            try {
                EditText editNumber = (EditText) findViewById(R.id.number);
                String phoneNumber = editNumber.getText().toString();

                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_CALL);  // 指定其动作为拨打电话
                String param = "tel:" + phoneNumber;
                System.out.println("拨号参数为:" + param);
                intent.setData(Uri.parse(param));  // 指定将要拨出的号码
                startActivity(intent);  // 执行打电话的
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }
}

五大布局Layout:
LinearLayout线性布局
RelativeLayout相对布局
AbsoluteLayout绝对布局
TableLayout表格布局
FrameLayout帧布局

原文地址:https://www.cnblogs.com/tuhooo/p/7882010.html