Android開發-Intent在Activity的使用

什麼是Intent?

顯式使用

第一步,創建兩個Activity和對應的佈局文件,與之關聯起來,我這裏是MainActivity和NewActivity
在這裏插入圖片描述
第二步,在AndroidManifest文件中進行註冊Activity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--這裏註冊了新的activity-->
        <activity android:name=".NewActivity"/>
    </application>

</manifest>

第三步,在MainActivity文件裏,new一個intent對象括號中的參數分別是當前activity和跳轉的activity,使用 startActivity() 方法開始跳轉

Intent intent =new Intent(MainActivity.this,NewActivity.class);
startActivity(intent);

效果圖

在這裏插入圖片描述

隱式使用

Action+Category隱式

第一步,在AndroidManifest中爲NewActivity中加入Action和Category標籤,併爲其命名

  <activity android:name=".NewActivity">
            <intent-filter>
                <action android:name="com.example.myapplication.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT" />
                 <!--這裏是新建的category的name-->
                <category android:name="com.example.myapplication.MY_CATEGORY" />
            </intent-filter>
        </activity>

第二步,在MianAcitvity中修改intent參數,並使用addCategory()方法爲其新建的Category添加聲明

 Intent intent =new Intent("com.example.myapplication.ACTION_START");
 intent.addCategory("com.example.myapplication.MY_CATEGORY");
 startActivity(intent);

注意:在Android中我們可以通過Action和Category進行Intent隱式使用,只有Action和Category同時匹配才能響應Intent,否則就會報ActivityNoFoundException這個錯誤,找不到匹配的Activity,這裏效果同上。

URL隱式

跳轉瀏覽器打開

 Intent intent =new Intent(Intent.ACTION_VIEW);
 intent.setData(Uri.parse("https://www.baidu.com"));
 startActivity(intent);

效果:
在這裏插入圖片描述

匹配協議,選擇應用打開

在AndroidManifest中修改NewActivity的action android:name屬性爲android.intent.action.VIEW,然後再設置data android:scheme爲http協議

<activity android:name=".NewActivity">
            <intent-filter tools:ignore="AppLinkUrlError">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.example.myapplication.MY_CATEGORY" />
                <data android:scheme="https"/>
            </intent-filter>
        </activity>

效果:
在這裏插入圖片描述

內部跳轉-電話撥號

修改Intent參數爲Intent.ACTION_DIAL,這個爲android內置的通話活動參數名,URL指定爲tel:需要撥號的號碼

Intent intent =new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

在這裏插入圖片描述

傳遞數據

第一步,首先在MianActivity中設置一個要傳遞的值,然後是putExtra()設置參數,一個是值的名字(鍵),一個是要傳遞的值,在這裏我們使用顯示intent

intent.putExtra("newdata",data);

第二步,在NewActivity使用getIntent().getStringExtra()方法接受值

String data = getIntent().getStringExtra("newdata");

效果:
在這裏插入圖片描述

數據回傳

第一步,在MainActivity頁面使用startActivityForResult()方法啓動Activity,設置一個請求值,一般爲1或者0

startActivityForResult(intent,1);

第二步,在NewActivity中使用setResult()方法將值返回,設置兩個參數,一個爲RESULT_OK或RESULT_CANCELED,一個爲回傳的值

setResult(RESULT_OK, Intent.getIntent(a));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章