显式Intent
1.两个Activity之间的跳转
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
/*ComponentName com = new ComponentName("com.example.intent",
"com.example.intent.OtherActivity");
intent.setComponent(com);*/
intent.setClass(MainActivity.this, OtherActivity.class);
startActivity(intent);
}
});
public class OtherActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
ComponentName com = getIntent().getComponent();
View view = getLayoutInflater().inflate(R.layout.other, null);
TextView text = (TextView)view.findViewById(R.id.text);
text.setText(com.getClassName()+" "+com.getPackageName());
setContentView(view);
}
}
2.直接跳转到系统应用程序
运行系统自带的浏览器,logcat打印以下信息:
08-29 08:18:14.502: I/ActivityManager(277): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.browser/.BrowserActivity bnds=[256,417][320,481]} from pid 410
分析知浏览器的包名、类名等
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
ComponentName com = new ComponentName("com.android.browser",
"com.android.browser.BrowserActivity");
intent.setComponent(com);
startActivity(intent);
}
});
}
}
点击Button即可打开浏览器。
隐式Intent
1.自己配置Other类的intent-filter,设置action,category属性,intent设置这些属性打开Other类。
OtherActivity类在manifest.xml文件中的配置
<activity android:name=".OtherActivity">
<intent-filter>
<action android:name="com.example.water"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.example.water");
startActivity(intent);
}
});
}
}
intent设置action(category未设置,默认为DEFAULT),根据action,category打开有如此配置的类,OtherActivity
上面是自己为某一个类配置action,category,在android系统中提供了大量标准的action,category常量,示例如下:
//回到桌面
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
//回到桌面
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
});
}
}
同一个应用程序里面,自己激活自己的东西,推荐使用显式意图,效率高。
不同的应用程序里面,激活别人的程序,或者是希望自己的某一个界面被别人激活,推荐使用隐式意图。
1.查询系统里面的所有的activity,看看是不是有满足条件的activity。
2.有,判断有多少个,有一个的话,直接启动,有多个,以列表方式列出。
3.如果没有,程序异常终止,activity not found exception