博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android studio代码实现打电话+点击事件四种方式
阅读量:6838 次
发布时间:2019-06-26

本文共 9905 字,大约阅读时间需要 33 分钟。

  • Android系统架构(重点)

第一层:应用层Application

第二层:应用框架层Application Framework
第三层:Android底层类库层 Libraries、Dalvik虚拟机
第四层:linux内核层 linux kernel

Android是运行在Linux内核基础之上的。Google官方上提供了一张Android系统架构图(四层)。

  • 两种虚拟机的不同 (重点)

1、架构不同:JVM使用栈架构;Dalvik使用的是寄存器,数据是加载到CUP的寄存器上的。

2、JVM加载的.class文件,Dalvik加载的是.dex文件,对内存的分配情况做了优化。
3、jvm: sun oracle     dvm: Google

  • Android工程的目录结构(这些目录结构是eclipse下的目录结构,Android studio中的目录结构不一样)

src/ java源代码存放目录

gen/ 自动生成目录
gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的资源,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。

res/ 资源(Resource)目录

在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。

libs/ 支持库目录

程序开发时需要的一些三方的jar包可以放在这个目录,系统会自动把里面的jar包,添加到环境变量。

assets资源目录

Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径,如:file://android_asset/xxx.3gp

AndroidManifest.xml 项目清单文件(Android studio中的四大组件不用手动配置,会自动生成)

这个文件列出了应用程序所提供的功能,以后你开发好的各种组件需要在该文件中进行配置,如果应用使用到了系统内置的应用(如电话服务、互联网服务、短信服务、GPS服务等等),你还需在该文件中声明使用权限。

project.properties 项目环境信息,一般是不需要修改此文件

 

  • ADB命令

— 常见命令:

adb devices 列出所有的设备

adb shell 挂载到linux的空间 可以执行linux指令
adb install xxx.apk 如果有多个设备,我们可以指定设备 adb install –s emulator-5554 D:/xxx.apk
adb push 把文件推到手机里
adb pull 把文件从手机里拉出来
ctrl + F11 横竖屏的切换

  • 电话拨号器(重点)

开发项目的步骤:

1、理解需求,弄明白需求后在写代码;
2、在Android工程中设计UI界面;
3、代码实现业务逻辑;

1 
2
8 9
17 18
26

 

1 package com.example.ahu_lichang.myapplication; 2  3 import android.content.Intent; 4 import android.net.Uri; 5 import android.os.Bundle; 6 import android.support.v7.app.AppCompatActivity; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.EditText;10 11 public class MainActivity extends AppCompatActivity {12     private EditText et_phone;13     @Override14     protected void onCreate(Bundle savedInstanceState) {15         super.onCreate(savedInstanceState);16         setContentView(R.layout.activity_main);17 18         et_phone = (EditText) findViewById(R.id.et_phone);19         Button bt_call  = (Button) findViewById(R.id.bt_call);20 21         bt_call.setOnClickListener(new View.OnClickListener() {22             @Override23             public void onClick(View v) {24                 //获取输入的电话号码25                 String phone = et_phone.getText().toString().trim();26                 //创建打电话的意图27                 Intent intent = new Intent();28                 //设置拨打电话的动作29                 intent.setAction(Intent.ACTION_CALL);30                 //设置拨打电话的号码31                 intent.setData(Uri.parse("tel:" + phone));32                 //开启打电话的意图33                 startActivity(intent);34             }35         });36     }37 }

 

 

1     

 

注:这里拨打电话ACTION_CALL,在API22(Android5.1)上能正常运行。但是在高版本的API,例如API25(Android7.0)中,已经添加权限了,但是还是会报权限的错误!

  • 点击事件的四种创建方式

(1)采用内部类MyOnClickListener的方式去实现OnClickListener接口

1 package com.example.ahu_lichang.myapplication; 2  3 import android.content.Intent; 4 import android.net.Uri; 5 import android.os.Bundle; 6 import android.support.v7.app.AppCompatActivity; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.EditText;10 11 public class MainActivity extends AppCompatActivity {12     private EditText et_phone;13     @Override14     protected void onCreate(Bundle savedInstanceState) {15         super.onCreate(savedInstanceState);16         setContentView(R.layout.activity_main);17 18         et_phone = (EditText) findViewById(R.id.et_phone);19         Button bt_call  = (Button) findViewById(R.id.bt_call);20 21 /*        bt_call.setOnClickListener(new View.OnClickListener() {22             @Override23             public void onClick(View v) {24                 //获取输入的电话号码25                 String phone = et_phone.getText().toString().trim();26                 //创建打电话的意图27                 Intent intent = new Intent();28                 //设置拨打电话的动作29                 intent.setAction(Intent.ACTION_CALL);30                 //设置拨打电话的号码31                 intent.setData(Uri.parse("tel:" + phone));32                 //开启打电话的意图33                 startActivity(intent);34             }35         });*/36         class MyOnClickListener implements View.OnClickListener{37 38             @Override39             public void onClick(View v) {40                 //获取输入的电话号码41                 String phone = et_phone.getText().toString().trim();42                 //创建打电话的意图43                 Intent intent = new Intent();44                 //设置拨打电话的动作45                 intent.setAction(Intent.ACTION_CALL);46                 //设置拨打电话的号码47                 intent.setData(Uri.parse("tel:" + phone));48                 //开启打电话的意图49                 startActivity(intent);50             }51         }52         bt_call.setOnClickListener(new MyOnClickListener());53     }54 }

 

(2)匿名内部类

1 package com.example.ahu_lichang.myapplication; 2  3 import android.content.Intent; 4 import android.net.Uri; 5 import android.os.Bundle; 6 import android.support.v7.app.AppCompatActivity; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.EditText;10 11 public class MainActivity extends AppCompatActivity {12     private EditText et_phone;13     @Override14     protected void onCreate(Bundle savedInstanceState) {15         super.onCreate(savedInstanceState);16         setContentView(R.layout.activity_main);17 18         et_phone = (EditText) findViewById(R.id.et_phone);19         Button bt_call  = (Button) findViewById(R.id.bt_call);20 21         bt_call.setOnClickListener(new View.OnClickListener() {22             @Override23             public void onClick(View v) {24                 //获取输入的电话号码25                 String phone = et_phone.getText().toString().trim();26                 //创建打电话的意图27                 Intent intent = new Intent();28                 //设置拨打电话的动作29                 intent.setAction(Intent.ACTION_CALL);30                 //设置拨打电话的号码31                 intent.setData(Uri.parse("tel:" + phone));32                 //开启打电话的意图33                 startActivity(intent);34             }35         });36     }37 }

 

(3)当前类imp OnClickListener接口 

1 package com.example.ahu_lichang.myapplication; 2  3 import android.content.Intent; 4 import android.net.Uri; 5 import android.os.Bundle; 6 import android.support.v7.app.AppCompatActivity; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.EditText;10 11 public class MainActivity extends AppCompatActivity implements View.OnClickListener{12     private EditText et_phone;13     @Override14     protected void onCreate(Bundle savedInstanceState) {15         super.onCreate(savedInstanceState);16         setContentView(R.layout.activity_main);17 18         et_phone = (EditText) findViewById(R.id.et_phone);19         Button bt_call  = (Button) findViewById(R.id.bt_call);20 21         bt_call.setOnClickListener(this);22 23 /*        bt_call.setOnClickListener(new View.OnClickListener() {24             @Override25             public void onClick(View v) {26                 //获取输入的电话号码27                 String phone = et_phone.getText().toString().trim();28                 //创建打电话的意图29                 Intent intent = new Intent();30                 //设置拨打电话的动作31                 intent.setAction(Intent.ACTION_CALL);32                 //设置拨打电话的号码33                 intent.setData(Uri.parse("tel:" + phone));34                 //开启打电话的意图35                 startActivity(intent);36             }37         });*/38 /*        class MyOnClickListener implements View.OnClickListener{39 40             @Override41             public void onClick(View v) {42                 //获取输入的电话号码43                 String phone = et_phone.getText().toString().trim();44                 //创建打电话的意图45                 Intent intent = new Intent();46                 //设置拨打电话的动作47                 intent.setAction(Intent.ACTION_CALL);48                 //设置拨打电话的号码49                 intent.setData(Uri.parse("tel:" + phone));50                 //开启打电话的意图51                 startActivity(intent);52             }53         }54         bt_call.setOnClickListener(new MyOnClickListener());*/55     }56     @Override57     public void onClick(View v) {58         //获取输入的电话号码59         String phone = et_phone.getText().toString().trim();60         //创建打电话的意图61         Intent intent = new Intent();62         //设置拨打电话的动作63         intent.setAction(Intent.ACTION_CALL);64         //设置拨打电话的号码65         intent.setData(Uri.parse("tel:" + phone));66         //开启打电话的意图67         startActivity(intent);68     }69 70 }

 

(4)onclick

1     

 

1 package com.example.ahu_lichang.myapplication; 2  3 import android.content.Intent; 4 import android.net.Uri; 5 import android.os.Bundle; 6 import android.support.v7.app.AppCompatActivity; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.EditText;10 11 public class MainActivity extends AppCompatActivity {12     private EditText et_phone;13     @Override14     protected void onCreate(Bundle savedInstanceState) {15         super.onCreate(savedInstanceState);16         setContentView(R.layout.activity_main);17         et_phone = (EditText) findViewById(R.id.et_phone);18     }19     public void onclick(View v) {20         //获取输入的电话号码21         String phone = et_phone.getText().toString().trim();22         //创建打电话的意图23         Intent intent = new Intent();24         //设置拨打电话的动作25         intent.setAction(Intent.ACTION_CALL);26         //设置拨打电话的号码27         intent.setData(Uri.parse("tel:" + phone));28         //开启打电话的意图29         startActivity(intent);30     }31 }

 

  • 五种布局

1. 线性布局LinearLayout(重点) 分水平和垂直2种

2. 相对布局RelativeLayout:各个组件都是按照相对位置来摆放。
3. 帧布局FrameLayout: 一层一层绘制
4. 表格布局TableLayout
5. 绝对布局AbsoluteLayout  已经被谷歌废弃

在实际的开发工作中线性布局和相对布局用的比较多,大多数的项目中都是各种不同布局的相互嵌套使用。

 

转载于:https://www.cnblogs.com/ahu-lichang/p/6567945.html

你可能感兴趣的文章
程序员的出路之一
查看>>
程序员学习视频教程汇总——(转载)
查看>>
IDEA一直提示 错误: 找不到或无法加载主类
查看>>
王爽 实验7 答案
查看>>
同一个页面,两次请求保证查询条件不变(题目不太相符,我比较渣,问题都不知道怎么表述!--)...
查看>>
freemarker的${!}
查看>>
一个简单的synchronized多线程问题、梳理与思考
查看>>
使用Web.Config Transformation配置灵活的配置文件
查看>>
python PILLOW
查看>>
界面间传值
查看>>
iOS强制屏幕旋转
查看>>
js:如何在循环异步请求的每次返回中添加想要的值
查看>>
POJ-1258 Agri-Net(kruskal最小生成树)
查看>>
BZOJ-1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(SPFA)
查看>>
LaTeX 简介与安装
查看>>
(28)SpringBoot启动时的Banner设置【从零开始学Spring Boot】
查看>>
内核配置中 ramdisk 大小修改
查看>>
socket通信时如何判断当前连接是否断开--select函数,心跳线程,QsocketNotifier监控socket...
查看>>
Beta 冲刺(4/7)
查看>>
BeautfuiSoup4解析器
查看>>