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