Android studio代码实现打电话+点击事件四种方式

  • 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.javaR.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 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:id="@+id/activity_main"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7 >
 8 
 9     <Button
10         android:text="拨打电话"
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content"
13         android:layout_alignParentBottom="true"
14         android:layout_centerHorizontal="true"
15         android:layout_marginBottom="179dp"
16         android:id="@+id/bt_call" />
17 
18     <EditText
19         android:hint="请输入电话号码"
20         android:layout_width="wrap_content"
21         android:layout_height="wrap_content"
22         android:layout_marginBottom="53dp"
23         android:id="@+id/et_phone"
24         android:layout_above="@+id/bt_call"
25         android:layout_centerHorizontal="true" />
26 </RelativeLayout>

 

 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     @Override
14     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             @Override
23             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     <uses-permission android:name="android.permission.CALL_PHONE"/>

 

注:这里拨打电话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     @Override
14     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             @Override
23             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             @Override
39             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     @Override
14     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             @Override
23             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     @Override
14     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             @Override
25             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             @Override
41             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     @Override
57     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     <Button
2         android:text="拨打电话"
3         android:onClick="onclick"
4         android:layout_width="wrap_content"
5         android:layout_height="wrap_content"
6         android:layout_alignParentBottom="true"
7         android:layout_centerHorizontal="true"
8         android:layout_marginBottom="179dp"
9         android:id="@+id/bt_call" />

 

 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     @Override
14     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  已经被谷歌废弃

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


 

posted @ 2017-03-17 19:04  ahu-lichang  阅读(14690)  评论(0编辑  收藏  举报