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));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章