Ctrl+1 把临时变量转成field属性.
public class Activity extends ContextThemeWrapper
Activity继承了ContextThemeWrapper,ContextThemeWrapper继承了ContextWrapper,ContextWrapper继承了Context。所以MainActivity.java就是一个Context。Activity就是一个上下文。
每一个应用你看到的界面都是一个activity。每一个你看到的界面都是对应着一个activity。
凡是跟用户引资相关的或者是需要用户花钱的操作都需要申请权限。它引入这套权限机制的目的是让用户安装你的应用的时候。安卓手机安装应用的时候会弹出界面提示当前应用需要申请如下的权限,5.0之前不可能选择具体的某一个权限接受还是不接受,要么全部接受要么全部不接受。5.0之后的安卓设备可以单独的给某一个权限进行控制。老师改的操作系统都会对权限做自定义的设置,即使是4.4的老师改的操作系统也可以对具体某一个权限进行相应的设置。
添加权限需要在清单文件AndroidManifest.xml.其实就是在你的清单文件里面声明了这么一句话。
<uses-permission android:name="android.permission.CALL_PHONE"/>
注意不能拨打老外的紧急电话
Open Declaration String android.content.Intent.ACTION_CALL = "android.intent.action.CALL"
Activity Action: Perform a call to someone specified by the data.
Input: If nothing, an empty dialer is started; else getData is URI of a phone number to be dialed or a tel: URI of an explicit phone number.
Output: nothing.
Note: there will be restrictions on which applications can initiate a call; most applications should use the ACTION_DIAL.
Note: this Intent cannot be used to call emergency numbers. Applications can dial emergency numbers using ACTION_DIAL, however.
this Intent cannot be used to call emergency numbers
你的代码没问题,只不过出于安全的考虑把你的意图拦截了。
package com.itheima.dailer; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.text.TextUtils; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et_number; //Activity 代表了一个用户的界面. 每一个android的界面都对应一个activity //activity可以创建一个窗口,在这个窗口上加载用户的界面(UI) 这个界面就是用来跟用户交互的 //Activity是安卓中最重要的API, @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //当activity创建的时候就会调用oncreate.在oncreate中做初始化的操作 // 首先调用setContentView()方法 加载界面 加载到内存 展示出来 setContentView(R.layout.activity_main); et_number = (EditText) findViewById(R.id.editText1); Button btn_call = (Button) findViewById(R.id.button1); //给按钮添加点击事件 btn_call.setOnClickListener(new MyonClickListener());//接收一个OnClickListener对象 } private class MyonClickListener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub // 当控件被点击的时候就会调用这个onclick方法 // ① 获取用户的输入 String number = et_number.getText().toString(); // ② 判断用户输入是否为空 if(TextUtils.isEmpty(number)){//安卓提供的APITextUtils // 如果为空 提示用户输入内容 //Toast.makeText 向界面输出一个短暂的提示 //第一个参数 上下文Context Activity就是一个上下文 可以传入当前activity对象 //第二个参数 要显示的提示文字 //第三个参数 显示提示的时间长度 Toast.LENGTH_SHORT(显示的时长较短) Toast.LENGTH_LONG(显示的时长较长) //不要忘记要调用show()方法 显示这个Toast Toast.makeText(MainActivity.this, "电话号码不能为空", Toast.LENGTH_SHORT).show();//duration 时长 System.out.println("用户输入是空的"); }else{ //如果不为空 用获取的电话号码 打电话 System.out.println("打电话:"+number); //Intent 意图 就是对要进行的操作的抽象描述 Intent intent = new Intent();//创建一个意图对象 //给意图设置要操作的动作 ACTION_CALL intent.setAction(Intent.ACTION_CALL); //给意图设置要携带的数据 //URL 统一资源定位符 http:// ftp:// https:// abc://(访问不到,压根就没有abc这个协议),必须是已经规范好的协议 //uri 统一资源标示符 url 子类父类的关系 uri比URL多了一个特性 类似于XML和HTML的关系 uri可以自定义协议/自己声明一个协议 Uri data = Uri.parse("tel:"+number);//"tel:"就是咱们自定义的协议 不写tel:不能正确地把电话号码拿到 intent.setData(data); //开启打电话的activity(打电话的界面) startActivity(intent); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }