安卓学习笔记2——电话拨号器

一、知识复习:

1、安卓系统构成

在这里插入图片描述

2、jvm与dvm区别

[1]dvm把所有的.class文件变成一个dex文件
[2]基于的架构不同
在这里插入图片描述

3、ART模式(Android Runtime)

Android4.4以前——应用程序均在Dalvik Java的虚拟机上运行,每次程序运行需要将程序编译为机器码
Android4.4以前——新增ART模式,安装程序时,预编译一部分代码为机器码,这样更快更省电,代价是程序安装的内存变大

4、安卓sdk目录

在这里插入图片描述

  • docs——文档

api guide大而全,一下子看进去细节太多,不容易学习,采用螺旋式学习比较好。
在这里插入图片描述

  • sources——安卓各个版本源码
  • platform——安卓平台
  • platform tool——平台工具:

dx.bat 把所有.class文件变成了一个dex文件
aapt Android应用打包工具
adb Android调试桥

5、布局与控件

  • 常用控件:有自己的属性和id
    Button,
    TextView,
    EditText,
    ImageView,
    ProgressBar(进度条),
    ProgressDialog,
    AlertDialog(提示)

每新建一个控件,使用id属性为该控件在R文件中添加一个id
android:id="@+id/checkbox",则可在全局找到,“+”表示添加

  • 高级控件(暂时不用管)
    ListView(实现上下滚动)
    RecyclerView

  • 基本布局:
    LinearLayout(线性布局,可指定垂直或水平排列)
    RelativeLayout(相对布局,可指定控件的相对位置)
    FrameLayout(帧布局,重叠)
    TableLayout(表格,指定行列)
    GridLayout

  • 新增布局
    PercentFrameLayout(百分比布局)
    PercentRelativeLayout

新增布局的使用需要添加依赖:
打开app/build.gradle文件,在dependencies闭包中添加如下内容:
dependencies{
compile fileTree(dir:‘libs’,include:[’*.jar’])
compile’com.android.support:appcompat-v7:24.2.1’
compile’com.android.support:percent:24.2.1’
testCompile‘junit:junit:4.12’

  • 布局与控件关系:继承关系
    可以自定义布局
    在这里插入图片描述

二、电话拨号器

1、code

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/editText0"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入手机号码"
        android:textSize="20dp"
        />
    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/editText0"
        android:hint="号码"
        android:textSize="25dp">

        >
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/editText1"
        android:text="拨打"
        android:textSize="25dp">

    </Button>

</RelativeLayout>

主活动:

package com.example.phonecall;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText et_number=(EditText) findViewById(R.id.editText1);

        Button bt=(Button) findViewById(R.id.button1);

//      权限获取
        int REQUEST_EXTERNAL_STORAGE = 1;
        String[] PERMISSIONS_STORAGE = {
                Manifest.permission.CALL_PHONE
        };
        int permission = ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE);

        if(permission!= PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(
                    MainActivity.this,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        }
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                System.out.println("我被点击啦");
                String number =et_number.getText().toString().trim();
                if (number.equals("")){
                    Toast.makeText(MainActivity.this,"号码不为空",Toast.LENGTH_SHORT).show();
                }
                else{

                    Intent intent=new Intent();
                    intent.setAction(Intent.ACTION_CALL);
                    intent.setData(Uri.parse("tel:"+number));

                    startActivity(intent);
                }
            }

        });
    }

}

清单文件:拨打电话的权限添加

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

在这里插入图片描述

2、遇到的问题或知识点

(1)拨打电话的权限问题:拨打时程序直接挂掉

官方文档指出android 6以后,即使在清单文件中列出,仍然要每次检查权限,
在这里插入图片描述
在这里插入图片描述
目前的解决办法,参考网上一位博主,创建活动时检查权限;
之后可能深入了解后,会有其他解决办法

//      权限获取
        int REQUEST_EXTERNAL_STORAGE = 1;
        String[] PERMISSIONS_STORAGE = {
                Manifest.permission.CALL_PHONE
        };
        int permission = ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE);

        if(permission!= PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(
                    MainActivity.this,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        }

在这里插入图片描述


(2)按键监听的四种方法

  • 内部类实现Onclicklinstener接口
    在这里插入图片描述

  • 匿名内部类
    在这里插入图片描述

  • 当前类实现Onclicklinstener接口(适用多个按钮),
    重写onclick方法
    在这里插入图片描述

  • 按键布局中加一个onclick属性,在Activity里面定义一个方法方法名和属性名系统
    该方法原理比较复杂,涉及安卓源码,暂不详解

(3)Toast

官方:类似于弹窗提示
A toast is a view containing a quick little message for the user. The toast class helps you create and show those.
在这里插入图片描述
使用Toast提示号码不为空
在这里插入图片描述
code

String number =et_number.getText().toString().trim();
                if (number.equals("")){
                    Toast.makeText(MainActivity.this,"号码不为空",Toast.LENGTH_SHORT).show();
                }

(4)Intent意图

使用Uri来传递我们的号码
在这里插入图片描述
code

                    Intent intent=new Intent();
                    intent.setAction(Intent.ACTION_CALL);
                    intent.setData(Uri.parse("tel:"+number));

                    startActivity(intent);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值