Intent类型分为显式Intent(直接类型)、隐式Intent(间接类型)。相比与显式Intent,隐式Intnet则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。
接下来的这个例子实现了输入网址,点击按钮后调用系统浏览器打开网址;以及输入手机号,点击按钮后拨打,下面是具体的代码
我写了两个Activity,第一个Activity点击按钮跳转到第二个Activity,第二个实现上面所述功能
FirstActivity的.xml布局文件(只有一个按钮):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/activity_first"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<Button
android:id="@+id/btn_next"
android:layout_width="160dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:text="进入第二页"/>
</LinearLayout>
FirstActivity.Java
package com.example.administrator.intenttext;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class FirstActivity extends Activity {
Button btnNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
btnNext = (Button) findViewById(R.id.btn_next);
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
}
接下来是SecondActivity的.xml布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/activity_first"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#ffffff"
android:orientation="horizontal">
<TextView
android:layout_width="60dp"
android:layout_height="40dp"
android:text="输入:"
android:textSize="18dp"
android:textColor="#000000"
android:layout_gravity="center"
android:gravity="center_vertical"/>
<EditText
android:id="@+id/et_search"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:background="#ffffff"
android:textSize="18dp"
android:textColor="#000000"
android:layout_gravity="center"
android:gravity="center_vertical"/>
</LinearLayout>
<Button
android:id="@+id/btn_search"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:text="搜索"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#ffffff"
android:orientation="horizontal"
android:layout_marginTop="10dp">
<TextView
android:layout_width="60dp"
android:layout_height="40dp"
android:text="电话:"
android:textSize="18dp"
android:textColor="#000000"
android:layout_gravity="center"
android:gravity="center_vertical"/>
<EditText
android:id="@+id/et_tellphone"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:background="#ffffff"
android:textSize="18dp"
android:textColor="#000000"
android:layout_gravity="center"
android:gravity="center_vertical"/>
</LinearLayout>
<Button
android:id="@+id/btn_tellphone"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:text="拨打"/>
</LinearLayout>
SecondActivity.java
package com.example.administrator.intenttext;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/**
* Created by Administrator on 2017/5/21.
*/
public class SecondActivity extends Activity {
EditText etSearch,etTellPhone;
Button btnSearch,btnTellPhone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
etSearch = (EditText)findViewById(R.id.et_search);
etTellPhone = (EditText)findViewById(R.id.et_tellphone);
btnSearch = (Button)findViewById(R.id.btn_search);
btnTellPhone = (Button)findViewById(R.id.btn_tellphone);
//搜索监听事件
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String search = etSearch.getText().toString();
//intent.action_view,设置动作,Uri.parse设置要访问的数据
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://" + search));
startActivity(intent);
}
});
//拨打电话监听事件
btnTellPhone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String tellPhone = etTellPhone.getText().toString();
//此处也可使用action.call,实现的是直接拨打电话,使用action.dial实现的是先进入电话号码输入页面,再点击拨打按钮拨打电话
Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:" + tellPhone));
startActivity(intent);
}
});
}
接下来我们还需要在清单文件AndroidManifest.xml中进行配置
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
任何一个需要隐式启动的Activity都必须要有这项:<category android:name="android.intent.category.DEFAULT"/>
例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题
事例源码地址:IntentText