天天看點

android界面跳轉,Intent介紹

上一章我們講了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);
    }