显式和隐式Intent来启动活动

来源:互联网 发布:淘宝订单号大小怎么看 编辑:程序博客网 时间:2024/05/29 19:58

先看显式效果图跟代码:
这里写图片描述
这里我们用显式Intent打开了一个美国队长的活动,这里有个按钮用于换图。
布局文件就不放了哈,那些按钮初始化后,直接在onCreate()中为打开活动的按钮设置监听事件

btn_captainAmerica.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intent = new Intent(MainActivity.this,C_Activity.class);                intent.putExtra("NAME","美国队长");                startActivity(intent);            }        });

以上是在主活动中完成,然后再创建一个名为C_Activity的活动用来换图和接收NAME

public class C_Activity extends AppCompatActivity {    private Button btn_changer;    private ImageView img;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_c_);        setTitle("美国队长");        String name = getIntent().getStringExtra("NAME");        Toast.makeText(C_Activity.this,"我是"+name,Toast.LENGTH_LONG).show();        /*这里定义一个Toast,第一个参数是上下文,第二个参数是Toast显示的文本内容,第三个是Toast显示的时长,最后一定要细心加细心,因为我常常会忘了加.show(),不然你会看不到文本内容*/        btn_changer = (Button) findViewById(R.id.btn_changer);        img = (ImageView) findViewById(R.id.img_s);        btn_changer.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                img.setImageResource(R.drawable.c2);                //换图用到setImageResource()            }        });    }}

怎样?显示Intent是否easy,接下来就是隐式Intent了。

在onCreate中为运用隐式的按钮设置监听事件

btn_baidu.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intent = new Intent();                intent.setAction(Intent.ACTION_VIEW);                intent.setData(Uri.parse("http://www.baidu.com"));                startActivity(intent);            }        });        btn_dial.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intent = new Intent();                intent.setAction(Intent.ACTION_DIAL);//出现一个打电话界面,需要手动拨打                intent.setData(Uri.parse("tel:10086"));                startActivity(intent);            }        });        btn_call.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intent = new Intent();                intent.setAction(Intent.ACTION_CALL);//直接打给114                intent.setData(Uri.parse("tel:114"));                startActivity(intent);            }        });

这里有四个简单的隐式,因为不用配置当前活动能够响应的action和category,我们来看第一个,首先指定了Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去。

隐式Intent有趣的是可以更精确地指定当前活动能够响应什么类型的数据。
打开AndroidManifest.xml在中的action和category,只有这两者的内容同时能匹配上Intent中指定的action和category时,这个活动才能响应该Intent。

我们创建一个按钮

btnEat.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent();                intent.setAction("I_WANT_EAT");                intent.addCategory("JIPAFAN");                startActivity(intent);            }        });

为了有多个活动能响应这个隐式intent,我们创建两个Activity分别为ActitiyD和ActitiyC

public class ActitiyD extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_actitiy_d);        setTitle("第二饭堂");    }}
public class ActivityC extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_c);        setTitle("第一饭堂");    }}

最后在AndroidManifest.xml中设置响应的事件

<activity android:name=".ActivityC" android:label="第一饭堂">            <intent-filter>                <action android:name="I_WANT_EAT"/>//与你所new的intent一致                <category android:name="android.intent.category.DEFAULT"/>            </intent-filter>        </activity>        <activity android:name=".ActitiyD" android:label="第二饭堂">            <intent-filter>                <action android:name="I_WANT_EAT"/>                <category android:name="android.intent.category.DEFAULT"/>                <category android:name="JIPAFAN"/>            </intent-filter>        </activity>

当你按下按钮时只有第二饭堂能响应,如果你想第一,第二饭堂都能响应,就把 intent.addCategory(“JIPAFAN”);去掉就行了
效果图:
这里写图片描述

原创粉丝点击