本地佛山企业网站建设,网络建站系统,专业写作网站,上海做网站设计公司目录 Intent对象简述Intent的作用Intent开启Activtiy显式启动Activity隐式启动Activity Intent对象简述
Android的应用程序包含三种重要组件#xff1a;Activity、Service、BroadcastReceiver#xff0c;应用程序采用了一致的方式来启动它们——都是依靠Intent来启动的… 目录 Intent对象简述Intent的作用Intent开启Activtiy显式启动Activity隐式启动Activity Intent对象简述
Android的应用程序包含三种重要组件Activity、Service、BroadcastReceiver应用程序采用了一致的方式来启动它们——都是依靠Intent来启动的Intent就封装了程序想要启动的程序的意图。不仅如此Intent还可用于与被启动组件交换信息。 下图显示了使用Intent启动不同组件的方法
Intent的作用
Intent是一个可以消息传递对象可以通过它来进行组件之间的信息传递。Intent主要有以下三个作用
1开启一个activity
2 开启一个service
3 发送广播消息
Intent开启Activtiy
在操作activity的显式启动和隐式启动之前我们还是需要先了解一下什么是activity的显示启动和隐式启动 显式启动指明要启动的Activity所在的类指的是它已经明确指定了将要启动的组件故称作显式启动 隐式启动系统根据Intent的动作和数据来决定启动那个Activity指的是没有指定Component属性没有明确指定要启动哪个组件引用将会根据Intent指定的规则去启动符合条件的组件但具体是哪个组件不确定 优点只要知道被启动Activity的Action和Category即可不用知道对应的类名或者是包名。 只要Activity有对应的action和Category都会被启动起来。然后提供给用户选择要启动哪一个。 需要被启动的Activity需要在自己的AndroidManifest.xml定义对应的action 和 category。
显式启动Activity
显式启动Activity比较简单先创建一个Intent指定应用程序上下文和需要启动的Activity然后调用startActivity来启动新的Activity
!--AndroidManifest.xml--
activity android:name.SecondActivity/activity
//启动Activity
Intent it new Intent(this, SecondActivity.class);
startActivity(it);
通过类名类启动Activity 一般是同一个APK里面使用 private void startSecondActivityByClass() {XLog.i(TAG, startSecondActivityByClass());Intent intent new Intent(FirstActivity.this, SecondActivity.class);try {startActivity(intent);} catch (Exception e) {XLog.i(TAG, start activity error!);}}通过包名加类名启动 不足被启动的应用的包名或者类名发生变化后就会无法启动。private void startSecondActivityByPackageName() {XLog.i(TAG, startSecondActivityByPackage());Intent intent new Intent();intent.setClassName(getPackageName(), getPackageName() .SecondActivity);try {startActivity(intent);} catch (Exception e) {XLog.i(TAG, start activity error!);}}通过ComponentName启动 不足被启动的应用的包名或者类名发生变化后就会无法启动。 private void startSecondActivityByComponent() {XLog.i(TAG, startSecondActivityByComponent());Intent intent new Intent();intent.setComponent(new ComponentName(getPackageName(), getPackageName() .SecondActivity));try {startActivity(intent);} catch (Exception e) {XLog.i(TAG, start activity error!);}}隐式启动Activity
打开AndroidManifest.xml查看里面的代码在学习隐式启动Activity前需要了解里的参数。
Activity的别名可以修改自己Activity的名称 android.intent.action.MAIN决定应用程序最先启动的Activity
给Activity进行分组可以自己添加一个组别 一种默认的category在调用startActivity()方法的时候会自动将这个category添加到Intent中 如果自己定义的某个Activity要通过隐式启动在AndroidManifast.xml必须加上android.intent.category.DEFAULT否则不起作用
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 想要App隐藏图标去掉LAUNCHER或者使用DEFAULT即可
如果一个应用多个Activity都设置了这个参数则程序列表里会显示多个该应用Activity的图标
1.通过Activity的别名隐式启动
activity android:name.SecondActivityintent-filter!--取别名--action android:namecom.example.test.ACTION_START/category android:nameandroid.intent.category.DEFAULT//intent-filter
/activity//隐式启动系统Activity
//参数1字符串某Activity的别名
Intent it new Intent(com.example.test.ACTION_START);
startActivity(it);
2.通过别名和自定义的种类隐式启动
activity android:name.SecondActivityintent-filter action android:namecom.example.test.ACTION_START/category android:nameandroid.intent.category.DEFAULT/category android:namecom.example.test.MY_CATEGORY//intent-filter
/activity
Intent it new Intent(com.example.test.ACTION_START);
//添加自定义的种类
intent.addCategory(com.example.test.MY_CATEGORY);
startActivity(it);
3.根据用户的数据类型打开相应的Activity Intent.ACTION_VIEW是Android系统内置的一个动作通过URi.parse()方法解析后再调用Intent.setData()方法讲这个Un对象传递进去
Intent it new Intent(Intent.ACTION_VIEW);
it.setData(Uri.parse(https://www.baidu.com));
startActivity(it);//参数1字符串某Activity的别名
//参数2打开的路径,通过协议来具体的确定打开什么Activity
Intent it2 new Intent(Intent.ACTION_VIEW, Uri.parse(https://www.baidu.com));
startActivity(it2);Intent it3 new Intent(Intent.ACTION_DIAL, Uri.parse(tel:18812341234));
startActivity(it3);
4.响应用户指定的数据类型
activity android:name.SecondActivityintent-filter tools:ignoreAppLinkUrlError action android:namecom.example.test.ACTION_START/category android:nameandroid.intent.category.DEFAULT/data android:schemehttps/intent-filter
/activity
这样就可以通过Android:scheme指定了数据的协议必须的httos协议这样此Activity就能和浏览器网页 一样响应一个打开网页的Intent了。