2016.03-04 学习笔记-Android中隐式Intent 的使用

Posted Eternal Hope

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2016.03-04 学习笔记-Android中隐式Intent 的使用相关的知识,希望对你有一定的参考价值。

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"/>

 效果如图所示:

技术分享        技术分享

 

以上是关于2016.03-04 学习笔记-Android中隐式Intent 的使用的主要内容,如果未能解决你的问题,请参考以下文章

采坑经验:Dubbo 2.6.x版本中隐式参数attachment的错误使用方式,稍不注意就会出现生产事故

OAuth 2 中隐式授权类型的目的是啥?

为啥 PySide 会从 Signals 的类成员中隐式创建对象成员?

为啥要在 Python 中隐式检查是不是为空? [关闭]

Lombok 生成的构造函数不能在 SpringBootTest 中隐式自动装配

C++ 为啥基类/结构构造函数不能有多个参数可以从派生中隐式调用?