上一章我們講了activity基本界面的實作。可是,上次講的隻有一個界面,在大部分APP中都是很多界面互相跳轉的!那麼,我們如何實作在不同的Activity或其他元件中進行跳轉或者其他操作呢,帶着這個疑問,今天給大家帶來一個android開發中非常重要的元件,Intent。
Intent負責對應用中的個大元件進行互動,每一次互動,我們将它視為一個動作,這個動作可能實際資料,附加資料。android則根據Intent的攜帶的資料,找到相應的元件,将Intent傳遞給他!那麼在這裡Intent就起到了一個媒介的作用!她為兩個元件中通訊搭建了橋梁,為兩個或多個元件提供互相調用的資訊!
Intent主要由兩個分類,顯式意圖和隐式意圖
1. 顯式意圖:多用于本應用将Activity間的通訊,調用Intent.setClass()方法為明确指定元件名是顯式意圖!明确指定了應該傳遞資料到哪個元件!
2. 隐式意圖:沒有明确指定元件名的為隐式意圖,多用于跨應用啟動Activity,如打電話什麼的!
顯式意圖就不多說了,大家到網上一搜一大堆,我在這說一下隐式意圖!
隐式意圖包括:Action(動作),category(附加資料),Data(資料),Type(類型),其實這就跟我們上面說的差不多,隐式意圖通過這幾項構成了一個動作!舉個小例子吧,在一些重要場合下,各種大拿見了女士要親吻對方的手。首先親吻的整個過程就是一個Action(動作),這位女士代表了Data,而Type就代表了這位女士的性别(這樣寫有點尴尬了,本來就是個女的),而親吻過後在告訴這位女士歡迎你這就是category(附加資料)!好了,就這樣吧!下面直接上執行個體!
撥打電話(調用的是SDK提供的方法),一定要在AndroidMenifest檔案裡加上這個權限:<uses-permission android:name="android.permission.CALL_PHONE" />
package com.example.administrator.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
/**
* Created by Administrator on 2017/3/11.
*/
public class DemoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
initView();
}
private void initView() {
Button playphone = (Button) findViewById(R.id.playphone);
playphone.setOnClickListener(new Myplayphoneclick());
}
class Myplayphoneclick implements View.OnClickListener{
@Override
public void onClick(View v) {
//撥打電話按鈕的點選事件
//實作撥打電話
//實作方法隐式意圖調用架構層提供的撥打點話功能
//執行個體化Intent
Intent intent = new Intent();
//告訴應用我要幹什麼,
intent.setAction(Intent.ACTION_DIAL);
//建立Data,被執行對象
Uri data = Uri.parse("tel"+"135076369xx");
//設定被執行對象
intent.setData(data);
//開始撥打電話
startActivity(intent);
}
}
}
有的哥們說,這麼久了,一直都是調用系統提供的方法(可否自己實作一下,裝一波),OK,沒問題,下面實作自定義Intent隐式意圖!
1.設定清單檔案過濾器
<activity android:name=".DemoActivity2">
<!--過濾器-->
<intent-filter>
<!--自定義動作-->
<action android:name="com.example.xxx"></action>
<!--自定義(Scheme)與(host)-->
<data android:host="www.baidu.com"
android:path="/person"
android:scheme="Demoxxx"></data>
<!--自定義類型-->
<data android:mimeType="person/people" />
<!--附加類型-->
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
2.觸發事件中實作,這個隻是一個簡單的樣例,實際開發中,除非由特殊需求,否則很少用到自定義的!
public void click(View v){
Intent intent = new Intent();
intent.setAction("com.example.xxx");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.parse("Demoxxx://www.baidu.com/person"),
"person/people");
startActivity(intent);
}