Android学习——隐式Activity

摘要:
隐式Intent的使用是隐式的,没有命名名称,并且不指示必须由哪个Activity启动哪个Activity。123456然后使用另一个构造函数Intent创建隐式Intent:1button1.setOnClickListener;上述代码创建的Intent对象可用于启动活动。活动可以响应操作“android.biggerdranch.activitytest.action_START”。由于SecondActivity的类别被指定为默认类别,因此可以匹配该类别,并且可以成功启动SecondActivity。

使用隐式的Intent

含蓄,不指名道姓,不会指明那个Activity必须被哪个Activity所启动。

一个Activity2如何被另一个Activity1所启动,关键取决于AndroidManifest.xml中对于Activity2定义的两个标签的信息,分别是action和category。

1 <activity android:name=".SecondActivity">
2     <intent-filter>
3         <action android:name="android.bignerdranch.activitytest.ACTION_START" />
4         <category android:name="android.intent.category.DEFAULT" />
5     </intent-filter>
6 </activity>

然后使用另一个的构造函数Intent(String str)来创建隐式的Intent:

1  button1.setOnClickListener(new View.OnClickListener(){
2      @Override
3      public void onClick(View v) {
4          Intent intent = new Intent("android.bignerdranch.activitytest.ACTION_START");
5          startActivity(intent);
6      }
7  });

以上代码创建的Intent对象,用它启动Activity,启动的是能够响应"android.bignerdranch.activitytest.ACTION_START"这个action的活动,由于SecondActivity的category指定为默认,因此是可以匹配的,可以成功启动SecondActivity。

【注意】:每个Intent只能指定一个action,但却能指定多个category。

如果intent对象中多指定一个category,那么,这个intent就无法启动SecondActivity了:

1 button1.setOnClickListener(new View.OnClickListener(){
2      @Override
3      public void onClick(View v) {
4          Intent intent = new Intent("android.bignerdranch.activitytest.ACTION_START");
5          intent.addCategory("android.bignerdranch.activitytest.MY_CATEGORY");
6          startActivity(intent);
7      }
8  });

这样一来,使用startActivity(intent)启动一个Activity,没有一个Activity与它匹配,程序就会闪退。

出现运行时异常:android.content.ActivityNotFoundException:No Activity found to handle Intent

解决异常:在安卓总配置文件的<intent-filter>标签中再添加一个category声明:

 1 <activity android:name=".SecondActivity">
 2 
 3     <intent-filter>
 4 
 5         <action android:name="android.bignerdranch.activitytest.ACTION_START" />
 6 
 7         <category android:name="android.intent.category.DEFAULT" />
 8 
 9         <category android:name="android.bignerdranch.activitytest.MY_CATEGORY" />
10 
11     </intent-filter>
12 
13 </activity>

隐式Activity隐式的Activity正如名字一样,一些信息是隐秘的,我们来看看AndroidManifest.xml这个配置文件,它是用于捆绑Activity和视图的配置文件,就像jsp servlet一样。1、我们来看下他的配置
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.intent"    android:versionCode="1"    android:versionName="1.0" >
    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="21" />
    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".BMainActivity"            android:label="@string/title_activity_bmain" >
            <intent-filter >                <category android:name="android.intent.category.DEFAULT"/>                <action android:name="com.example.intent.BMainActivity" />            </intent-filter>
        </activity>    </application>
</manifest>1234567891011121314151617181920212223242526272829303132333435363738注意看 30 和 31行,是我新加的两行代码
<intent-filter >                <category android:name="android.intent.category.DEFAULT"/>                <action android:name="com.example.intent.BMainActivity" /></intent-filter>1234category android:name=”android.intent.category.DEFAULT”指定Intent跳转的方式为默认,默认为Activity间的跳转。action android:name=”com.example.intent.BMainActivity”,指定Activity的名字(别名)
2、我们来看看代码是怎么样隐式表达的。
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);
        findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                startActivity(new Intent("com.example.intent.BMainActivity"));            }        });    }12345678910111213new Intent(“com.example.intent.BMainActivity”),直接用在AndroidManifest.xml定义的别名来进行activity之间的跳转。
3、这么用有个优点,就是可以跨应用跳转,就是我可以从一个baidu应用,跳转到一个QQ音乐应用的Activity里,瞬间感觉这个隐式Intent不错吧。我们经常在应用中见到。所以有一点指的我们注意,那就是配置文件中,别名的命名规则,采取应用包名+activity名保证唯一。
4、如果我们不想对其他应用开放某个activity,那么通过配置接口实现。activity配置中增加android:exported=”false”,默认为true。
        <activity            android:name=".BMainActivity"            android:label="@string/title_activity_bmain"            android:exported="false" >
            <intent-filter >                <category android:name="android.intent.category.DEFAULT"/>                <action android:name="com.example.intent.BMainActivity" />            </intent-filter>
        </activity>————————————————版权声明:本文为CSDN博主「GP0071」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/gaopeng0071/article/details/45077203

免责声明:文章转载自《Android学习——隐式Activity》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java安全之Weblogic内存马Java环境搭建---(基础)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

android 在manifest 中设置 多个Activity时的 默认 根 Activity

An <activity> element can also specify various intent filters—using the <intent-filter> element—in order to declare how other application components may activate it. W...

adb 安装与使用(一)

一、ADB简介 1. 什么是adb?   adb(Android Debug Bridage)是Android sdk的一个工具;   adb 是用来连接安卓手机和PC端的桥梁,要有adb作为二者之间的维系,才能让用户在电脑上对手机进行全面的操作。   Android 的初衷是用adb这样的一个工具来协助开发人员在开发和拷贝Android 应用的过程中更好...

unittest 执行airtest 脚本

参考:https://blog.csdn.net/gzh00001/article/details/93331399 #!/user/bin/python3#coding=utf-8#2019/12/14 --17:21#author :huifrom airtest.core.api import *import unittestfrom Beautif...

Python 开发安卓Android及IOS应用库Kivy安装尝试

Python 开发安卓Android及IOS应用库Kivy安装尝试: 先来看看这货可以用来制作什么应用: Create a package for Windows Create a package for Android Creating packages for OS X Create a package for IOS 逆天的节奏啊,虽然600+页...

Android如何制作漂亮的自适布局的键盘

  最近做了个自定义键盘,但面对不同分辨率的机型其中数字键盘不能根据界面大小自已铺满,但又不能每种机型都做一套吧,所以要做成自适应,那这里主讲思路。   这里最上面的titlebar高度固定,下面输入的金额高度也固定(当然也可以自适应),主要是中间的数字键盘,高度和宽度需要自适应。先来张效果图:   最常见的解决方案是用线性布局,自适应当然是按比例,但布...

APP专项测试

一、功能测试 功能测试主要根据软件需求说明书或用户需求等资料,编写测试用例,以验证各个功能点的实现情况,具体实施过程参考如下: 根据被测试模块的功能点,设计相应的测试用例进行覆盖,例如涉及到用户输入的地方要考虑到边界,用户使用场景类要考虑到正常和异常的场景,业务相关联的模块需要联合测试等; 随时关注跟踪需求的变化和理解需求,对需求理解有误时及时更改相关测...