今天学习了Intent的基本用法。Intent是什么?Intent在Android中的核心作用就是“跳转”(Android中的跳转机制),同时可以携带必要的信息,将Intent作为一个信息桥梁。最常用的莫过于从一个activity跳转到另一个activity,然后返回到上一个activity。还可以在不同组件间进行数据传递。
Intent可分为两种,显示Intent和隐式Intent。
显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent。 即在通过Intent启动Activity时,需明确指定激活组件的名称。如果需要在本应用中启动其他的Activity时,可以使用显式意图来启动Activity。
Intent intent = new Intent(this, Main2Activity.class); startActivity(intent);
I
显式意图还可以根据目标组件的包名、全路径名来指定开启组
Intent intent = new Intent(); intent.setClassName("com.android.deskclock","com.android.deskclock.DeskClock"); startActivity(intent);
隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。系统会根据隐式意图中设置的动作(action)、类别(category)、数据(Uri和数据类型)找到最合适的组件。
<activity android:name="com.itcast.intent.Activity02"> <intent-filter> <action android:name="cn.itscast.xxx"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
使用隐式意图开启Activity的示例代码如下所示:
Intent intent = new Intent(); // 设置动作和清单文件一样 intent.setAction("cn.itscast.xxx"); startActivity(intent);
显式intent例子:
package com.nyl.intenttest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends Activity implements View.OnClickListener { private Button btnHome; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnHome = (Button) findViewById(R.id.btnHome); btnHome.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btnHome: Intent it = new Intent(); it.setAction(Intent.ACTION_MAIN); it.addCategory(Intent.CATEGORY_HOME); startActivity(it); break; } } }
隐式intent例子:
package com.nyl.intenttest; import android.app.Activity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity2 extends Activity implements View.OnClickListener { private Button btnTwo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); btnTwo = (Button) findViewById(R.id.btnTwo); btnTwo.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btnTwo: Intent it = new Intent(); it.setAction(Intent.ACTION_VIEW); startActivity(it); break; } } }
<activity android:name=".MainActivity2"
android:label="Activity2">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>