Android中Intent的使用分为显示Intent和隐式Intent 之前已经介绍过显示Intent的用法了,今天来介绍一下隐式Intent的用发.
当我们在使用一款软件时,如果需要从该软件内部开始拨号或者发短信,则需要通过使用隐式Intent将当前应用的Activity跳转到系统的拨号程序或者发送短信程序.
总之 使用一下两种情况需要使用隐式Intent
1.从当前应用跳转到系统自带应用
2.从当前应用跳转到另一款应用软件中
下面就通过一个例子让大家更好的了解隐式Intent的用法,该程序的功能是使当前应用自动将号码或者短信数据携带跳转至系统拨号和发送短信程序,同时也可以实现直接在当前应用拨打电话和发送短信.下面就将代码贴出
先贴布局文件:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/a1" tools:context="yang_a20160221dial_sendmessage.exercise.MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="45dp" android:layout_marginTop="20dp" android:orientation="horizontal" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#CCCCFF" android:text="电话号码:" /> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入号码" android:ems="10" > <requestFocus /> </EditText> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="45dp" android:layout_marginTop="10dp" android:orientation="horizontal" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="短信内容:" android:textColor="#CCCCFF"/> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入短信" android:ems="10" > <requestFocus /> </EditText> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="45dp" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="60dp" android:text="打电话" android:textColor="#CCFF00" android:id="@+id/btn1"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发短信" android:textColor="#CCFF00" android:id="@+id/btn2"/> </LinearLayout> </LinearLayout>
再贴Java代码:MainActivity.java
1 package yang_a20160221dial_sendmessage.exercise; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.net.Uri; 6 import android.os.Bundle; 7 import android.telephony.SmsManager; 8 import android.view.View; 9 import android.view.View.OnClickListener; 10 import android.view.View.OnLongClickListener; 11 import android.view.Window; 12 import android.widget.Button; 13 import android.widget.EditText; 14 import android.widget.Toast; 15 16 public class MainActivity extends Activity implements OnClickListener, OnLongClickListener { 17 18 private EditText editText1; 19 private EditText editText2; 20 private Button btn1; 21 private Button btn2; 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 requestWindowFeature(Window.FEATURE_NO_TITLE); 27 setContentView(R.layout.activity_main); 28 editText1=(EditText) findViewById(R.id.editText1); 29 editText2=(EditText) findViewById(R.id.editText2); 30 btn1=(Button) findViewById(R.id.btn1); 31 btn2=(Button) findViewById(R.id.btn2); 32 33 btn1.setOnClickListener(this); 34 btn2.setOnClickListener(this); 35 36 btn1.setOnLongClickListener(this); 37 btn2.setOnLongClickListener(this); 38 39 40 41 42 43 } 44 45 @Override 46 public void onClick(View v) {//点击按钮进入拨打电话和编辑短信界面 47 if (v==btn1) { 48 Toast.makeText(MainActivity.this, "点击拨号", 0).show(); 49 String action=Intent.ACTION_DIAL;//找到拨号界面 50 Intent i1=new Intent(action);//创建一个隐式Intent 使其跳转到打电话界面 51 //携带数据 52 String number=editText1.getText().toString(); 53 i1.setData(Uri.parse("tel:"+number));//"tel"必须这么写 54 //StartActivity 55 startActivity(i1); 56 57 } 58 else if(v==btn2){ 59 60 Toast.makeText(MainActivity.this,"点击发短信", 0).show(); 61 62 String action=Intent.ACTION_SENDTO;//ACTION_SENDTO 63 Intent intent=new Intent(action);//指向编辑短信界面 64 String number=editText1.getText().toString();//获取电话号码 65 String content=editText2.getText().toString();//获取短信内容 66 intent.setData(Uri.parse("smsto:"+number));//将电话号码携带过去 67 intent.putExtra("sms_body", content);//将短信内容携带过去 68 startActivity(intent); 69 } 70 71 } 72 73 @Override 74 public boolean onLongClick(View v) {//长按直接拨号和发短信 75 76 if (v==btn1) { 77 Toast.makeText(MainActivity.this, "正在拨号", 0).show(); 78 Intent i2=new Intent(Intent.ACTION_CALL); 79 String number=editText1.getText().toString(); 80 i2.setData(Uri.parse("tel:"+number));//前缀必须是"tel"指向打电话的界面 81 startActivity(i2); 82 } 83 else if(v==btn2){ 84 Toast.makeText(MainActivity.this,"正在发短信", 0).show(); 85 86 SmsManager manager=SmsManager.getDefault(); 87 String number=editText1.getText().toString(); 88 String content=editText2.getText().toString(); 89 //text短信内容 90 //destinationAddress->->目的地地址 电话号码 91 //service center address->->service center address服务中心 92 manager.sendTextMessage(number, null, content, null, null); 93 94 95 } 96 return true;//此事件已经本消费了,不会再出发点击 97 98 99
注意:要调用系统的拨号和发送短信程序需要在AndroidManifest中添加权限,具体代码如下
<!-- 添加打电话的权限 -->> <uses-permission android:name="android.permission.CALL_PHONE"/> <!-- 添加打电话的权限 -->> <uses-permission android:name="android.permission.SEND_SMS"/>
效果如图所示:
时间: 2024-10-25 15:56:39