Intent的使用

2018-08-07  本文已影响0人  糖糖_2c32
Intent可以分为两种:显式Intent和隐式。
1.显示Intent
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
2.使用隐式Intent

隐式Intent并不指明要启动那个活动,而是指定了一系列更为抽象的action,category等信息,然后交由系统去分析这个Intent,并帮我们找到可以响应这个隐式Intent的活动去启动。
在AndroidManifest.xml中添加

<activity android:name=".SecondActivity">
        <intent-filter>
               <action android:name="android.intent.action.ACTION_START" />

               <category android:name="android.intent.category.DEFULT" />
        </intent-filter>
 </activity>
Intent intent = new Intent(android.intent.action.ACTION_START);
startActivity(intent);

表示我们要启动能够响应android.intent.action.ACTION_START这个action的活动,因为android.intent.category.DEFULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中。
那么如何添加categoty呢?
只需intent.addCategory(android.intent.category.MY_CATEGORY);就行了。
当然Intent的隐式调用不禁能打开同一个App里的活动,还能打开另一个App里的活动,同样只需要<action/>与new Intent();里的action相同即可,不过一般不建议这样做。

3.Intent的其他用法

-展示一个网页

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

当然,要显示出网页,要在AndroidManifest.xml中添加访问网络的权限

<user-permission android:name="android.permission.INTERNET"/>

-调用系统拨号界面

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
3.向下个活动传递数据
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("data",content);
startActivity(intent);

接受数据

Intent intent = getIntent();
string content = intent.getStringExtar("data");
Bundle bundle = new Bundle();
bundle.put("key", value);
intent.putExtra(bundle);
intent.putExtra("key1",bundle);

接收数据

Intent intent = getIntent();
Bundle bundle = intent.getExtra();
bundle.getObject("key");
bundle.getObject("key1",value);//当key1不存在是,value为默认值
4.返回数据给上一个活动
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, requestCode);

在SecondActivity.java页面放置要返回的数据

Intent intent = new Intent();
intent.putExtra("key", 1);
setResult("RESULT_OK", intent);
finish();

SecondActivity被销毁后会回掉上个活动的onActivityResult()方法。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case 1:
                if (resultCode = RESULT_OK){
                    
                }
                break;
        }
    }
上一篇下一篇

猜你喜欢

热点阅读