android_activity二种启动界面

启动界面的两种方式

  • 显式意图

写法上简单多了,只要指定上下文,和具体的类就可以跳转

能够直接知道跳转的界面

    注册:
        <activity android:name="com.itheima.start.Activity01"></activity>
    跳转:

        Intent intent = new Intent(this , Activity01.class);

        startActivity(intent);




    作用: 一般是启动自己程序的界面,其他程序的界面通过这种方式无法启动

    如果使用了显式手法注册,还想被其他应用程序打开, 那么可以在activity标签里面,加上
    android:exported="true"
  • 隐式意图

写法上稍稍复杂,要指定action 和 data

看不出来跳转的界面,只有运行后才知道

    注册:

            <activity android:name="com.itheima.start.Activity02">
                <!-- 意图过滤器, 只要满足了action , 和 category .,那么久启动这个界面 -->
                <intent-filter >
                    <action android:name="com.itheima.start.action.OPEN02"/>

                    <category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
            </activity>

    跳转:

            Intent intent = new Intent();
            intent.setAction("com.itheima.start.action.OPEN02");
            intent.addCategory("android.intent.category.DEFAULT");
            startActivity(intent);


作用: 跳转其他的应用程序界面,或者是自己的应用程序界面想被其他的程序打开


详细参数: 

        action:  动作
        category  分类
        data: 指定数据,  一般关注两个:scheme  和 mimetype 

        android:scheme="itheima" android:path="www.itheima" android:mimeType="text/plain"

举个例子:需求:在一个程序里面,使用显示和隐式跳转

我们把下面这个应用叫做04应用,包名是com.itheima.start

MainActivity

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    //显式启动
    public void click01(View v){
        Intent intent = new Intent(this , Activity01.class);
        startActivity(intent);
    }

    //隐式启动
    public void click02(View v){
        Intent intent = new Intent();
        intent.setAction("com.itheima.start.action.OPEN02");
        intent.addCategory("android.intent.category.DEFAULT");
        startActivity(intent);
    }
}

Activity01

public class Activity01 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity01);
    }

}

Activity02

public class Activity02 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity02);
    }
}

AndroidManifest.xml

        <!--这里是设置了显示跳转,如果这个activity还想让其他的应用程序打开,那么这个activity在注册的时候,必须要设置android:exported="true"-->
        <activity android:name="com.itheima.start.Activity01" android:exported="true"></activity>

        <!--只要满足意图过滤,外部的应用程序,也是可以跳转到这个activity的--->
        //跳转隐式意图,必须设置意图过滤
        <activity android:name="com.itheima.start.Activity02">
            <!-- 意图过滤器, 只要满足了action , 和 category .,那么久启动这个界面 -->
            <intent-filter >
                <action android:name="com.itheima.start.action.OPEN02"/>

                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

现在举一个外部程序,打开A应用的程序的例子

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    //显式意图启动04应用01界面
    public void click01(View v){



        //Intent intent = new Intent(this ,Activity01.class);

        Intent intent = new Intent();
        intent.setClassName("com.itheima.start", "com.itheima.start.Activity01");
//使用setCalssName方法设置,
//参数1:应用程序的包名
//参数2:Activity01在注册清单文件的设置的值
        startActivity(intent);
    }

    //隐式意图启动04应用02界面
    public void click02(View v){
        Intent intent = new Intent();
        //需要满足意图过滤器
        intent.setAction("com.itheima.start.action.OPEN02");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        startActivity(intent);
    }
}

细节:

     <activity android:name="com.itheima.start.Activity02">
            <intent-filter >                
                <!-- 动作: 自己指定,一般都是包名.action名称的形式 -->
                <action android:name="com.itheima.start.action.OPEN02"/>

                <!-- 分类: default -->
                <category android:name="android.intent.category.DEFAULT"/>

               <!--  http://www.baidu.com  -->
                <data android:scheme="itheima" android:path="www.itheima" android:mimeType="text/plain"/>
            </intent-filter>
        </activity>

注意的是:在设置data这个过滤的时候,必须要小心设置

Intent intent = new Intent();
        intent.setAction("com.itheima.start.action.OPEN02");
        intent.addCategory("android.intent.category.DEFAULT");
        /*  
        //在设置scheme和mimeType的时候,需要使用下面这个方法
        //因为    
        //intent.setType(type);
        //intent.setData(Uri.parse());
        //这2个方法是会互斥的,他们后设置的,会把前面的那个给清楚调,所以使用下面那个方法,一起设置了
        */
        intent.setDataAndType(Uri.parse("itheima://itheima.com2"), "text/plain");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值