显式隐式Intent

显式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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值