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));