Intent寻找目标组件的两种方式:

Intent寻找目标组件的两种方式:

2023年7月7日发(作者:)

Intent寻找⽬标组件的两种⽅式:显式Intent:通过指定Intent组件名称来实现的,它⼀般⽤在知道⽬标组件名称的前提下,⼀般是在相同的应⽤程序内部实现的。隐式Intent:通过Intent Filter来实现的,它⼀般⽤在没有明确指出⽬标组件名称的前提下,⼀般是⽤于在不同应⽤程序之间。⼀.显式Intent ⼀般情况下,⼀个应⽤程序中需要多个屏幕,即是多个Activity类,并且在这些Activity之间进⾏切换通过Intent机制来实现的。在同⼀个应⽤程序中切换Activity时,我们通常都知道要启动的Activity具体是哪⼀个,因此常⽤显式的Intent来实现的。 下 ⾯的例⼦是在同⼀应⽤程序中MainActivity启动SecondActivity,下⾯的代码中,主要是为“转到SecondActivity”按 钮添加了OnClickListener,使得按钮被点击时执⾏onClick()⽅法,onClick()⽅法中则利⽤了Intent机制,来启动 SecondActivity,关键的代码是22~25⾏。1. 2. 7. 12. 18. 1. 2. 7. 12. 18. 1. package ty;2.

3. import ty;4. import ;5. import ;6. import ;7. import kListener;8. import ;9.

10. publicclass MainActivity extends Activity {11. private Button btn;12. @Override13. publicvoid onCreate(Bundle savedInstanceState) {14. te(savedInstanceState);15. setContentView();16.

17. btn = (Button)findViewById();18. //响应按钮btn事件19. lickListener(new OnClickListener() {20. @Override21. publicvoid onClick(View v) {22. //显⽰⽅式声明Intent,直接启动SecondActivity23. Intent it = new Intent(,);24. //启动Activity25. startActivity(it);26. }27. });28. }29. }1. package ty;2.

3. import ty;4. import ;5. import ;6. import ;7. import kListener;8. import ;9.

10. publicclass SecondActivity extends Activity {11. private Button secondBtn;12. @Override13. protectedvoid onCreate(Bundle savedInstanceState) {14. te(savedInstanceState);15. setContentView();16.

17. secondBtn=(Button)findViewById(Btn);18. //响应按钮secondBtn事件19. lickListener(new OnClickListener() {20. @Override21. publicvoid onClick(View v) {22. //显⽰⽅式声明Intent,直接启动MainActivity23. Intent intent = new Intent(,);24. //启动Activity25. startActivity(intent);26. }27. });28. }29. }清单⽂件,16~18⾏为SecondActivity在清单⽂件⾥的声明1. 2. 6. 7.

8. 9. 11. 12. 13. 14. 15. 16. 18. 19. 20. 效果图:

⼆.隐式Intent 下⾯是同⼀应⽤程序中的Activity切换的例⼦,需要中增加Activity的声明,并设置对应的Intent Filter和Action,才能被Android的应⽤程序框架所匹配。1. package ty;2.

3. import ty;4. import ;5. import ;6. import ;7. import kListener;8. import ;9.

10. publicclass MainActivity extends Activity {11. private Button btn;12.

13. @Override14. publicvoid onCreate(Bundle savedInstanceState) {15. te(savedInstanceState);16. setContentView();17.

18. btn = (Button) findViewById();19. // 响应按钮btn事件20. lickListener(new OnClickListener() {21. @Override22. publicvoid onClick(View v) {23. // 实例化Intent24. Intent it = new Intent();25. //设置Intent的Action属性26. ion("_ACTION");27. // 启动Activity28. startActivity(it);29. }30. });31. }32. }1. package ty;2.

3. import ty;4. import ;5.

6. publicclass SecondActivity extends Activity {7.

8. @Override9. protectedvoid onCreate(Bundle savedInstanceState) {10. te(savedInstanceState);11. setContentView();12. }13. }1. 2. 7. 11. 17. 1. 2. 7. 12. ⽂件的18,19⾏修改了Intent Filter,这样SecondActivity才能够接收到MainActivity发送的Intent。因为在MainActivity的 Intent发送的动作为"_ACTION",⽽在18⾏⾥,SecondActivity设置的 Action也为"_ACTION",这样就能进⾏匹配。1. 2. 6. 7.

8. 9. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 效果图:

对 于显⽰Intent,Android不需要再去做解析,因为⽬标组件很明确。Android需要解析的是隐式Intent,通过解析,将Intent映射 给可以处理该Intent的Activity,Service等。Intent的解析机制主要是通过查找已经注册在 中的所有IntentFilter以及其中定义的Intent,最终找到匹配的Intent。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688674693a161658.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信