android_activity二种启动界面

来源:互联网 发布:mac系统装win8最新方法 编辑:程序博客网 时间:2024/06/05 15:51

启动界面的两种方式

  • 显式意图

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

能够直接知道跳转的界面

    注册:        <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");
0 0
原创粉丝点击