当前位置:   article > 正文

Android学习笔记5:Intent意图学习

Android学习笔记5:Intent意图学习

还是,笔记仅为供自己学习记录,如果有幸对看官产生帮助,我会很荣幸

Intent 意图

Intent是什么?它是连接应用程序的三个核心组件--Activity、Service和BroadcastReceiver的桥梁,完成组件之间的调用,在组件之间传递信息。

当不同组件之间要交流时,需要用Intent来对其中涉及到的行动,动作及涉及到的数据进行描述、传递。

Intent对象,由组件名称,以及Action、Data、Category、Extra和Flag几部分组成。

  1. 要处理该Intent的组件名称。
  2. Action行动:一个字符串,用于命名要采取的行动
  3. Data数据:执行动作要操作的数据,用指向数据的一个URL来表示。例如指向某联系人的URL为:content://contacts/1
  4. category类别:被执行动作的附加信息
  5. type数据类型:强制指定数据的类型
  6. extras附加信息:其他所以附加信息的集合
  7. flag标志:Android系统启动一个Acitvity以及Activity启动后对其进行数据处理

 Intent的分类:Intent有直接意图和间接意图两种方式。

(1)直接意图:指定了要调用的组件,一般用在应用程序的内部,或者明确知道组件的名称。如

  1. Intent i = new Intent(this,ActivitySec.class);
  2. //表明了当前组件(this),到类ActivitySec的直接意图

(2)间接意图:没有指定具体组件,这些Intent包含足够的信息,系统根据这些信息,在所有可用的组件中,确定满足此Intent的组件。例如是调用照相机,还是打开浏览器等等

  1. Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
  2. startActivity(intent);

例如上述例子,则是跳转到网址百度的,那么系统将会自动检测,判断出打开浏览器,从而进入百度页面

此外,还有其他的模糊意图

浏览网页:

intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://developer.android.com"));

打电话:

intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:(+86)10086"));

拨号:

intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:(+86)10086"));

发短信:

  1. intent = new Intent(Intent.ACTION_VIEW);
  2. intent.putExtre("sms_body","The SMS text");
  3. intent.setType("vnd.android-dir/mms-sms");

启动照相机

intent = new Intent("android.media.action.IMAGE_CAPTURE");

不过,在使用过程中,都要进行注册,一定的权限,下面是常用的:

  1. 上网权限
  2. <uses-permission android:name="android.permission.INTRNET">
  3. 使用照相机的权限
  4. <uses-permission android:name="android.permission.CAMERA">
  5. 发短信的权限
  6. <uses-permission android:name="android.permission.SEND_SMS">
  7. 打电话的权限
  8. <uses-permission android:name="android.permission.CALL_PHONE">
  9. 写短信的权限
  10. <uses-permission android:name="android.permission.WRITE_SMS">

Intent 直接意图和间接意图举例

接下来,来尝试一下几种不同的跳转方式

界面文档我就不贴了,直接发图:

MainActivity.java

  1. public class MainActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. }
  7. public void onClick(View view) {
  8. // TODO Auto-generated method stub
  9. switch(view.getId()){
  10. //button1是跳转到新的界面
  11. case R.id.button1:
  12. Intent intent_two = new Intent(MainActivity.this,TwoActivity.class);
  13. startActivity(intent_two);
  14. break;
  15. //button2是带信息跳转到新的界面
  16. case R.id.button2:
  17. Intent intent_three = new Intent(MainActivity.this,ThirdActivity.class);
  18. intent_three.putExtra("text1", "这是第二个Activity");
  19. startActivity(intent_three);
  20. break;
  21. //button3是带有返回值的跳转,当跳回主界面的时候,会toast出所返回的信息
  22. case R.id.button3:
  23. Intent intent_four = new Intent(MainActivity.this,FourActivity.class);
  24. startActivityForResult(intent_four, 1);
  25. break;
  26. /*
  27. *通过间接意图来实现跳转到另一应用的指定界面(浏览器界面)
  28. */
  29. case R.id.button4:
  30. Intent intent_five = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
  31. //当识别出http://时,会默认打开浏览器
  32. startActivity(intent_five);
  33. break;
  34. }
  35. }
  36. @Override
  37. public boolean onCreateOptionsMenu(Menu menu) {
  38. // Inflate the menu; this adds items to the action bar if it is present.
  39. getMenuInflater().inflate(R.menu.activity_main, menu);
  40. return true;
  41. }
  42. @Override
  43. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  44. // TODO Auto-generated method stub
  45. super.onActivityResult(requestCode, resultCode, data);
  46. if(requestCode==1&&resultCode==2){
  47. String backData=data.getStringExtra("name");
  48. Toast.makeText(MainActivity.this,backData,0).show();
  49. }
  50. }
  51. }

TwoActivity.java,对应第一种跳转

  1. public class TwoActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. // TODO Auto-generated method stub
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.second_activity);
  7. }
  8. }

ThirdActivity,对应第二种跳转,带信息跳转到新的页面

  1. public class ThirdActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. // TODO Auto-generated method stub
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.third_activity);
  7. TextView tv=(TextView)findViewById(R.id.third_textView1);
  8. String str=this.getIntent().getExtras().getString("text1");
  9. }
  10. }

ForthActivity.java,对应有返回值的跳转,在这个界面来存入信息,当跳回主界面时会toast出刚刚输入的信息。

​​

 

  1. public class FourActivity extends Activity implements OnClickListener{
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. // TODO Auto-generated method stub
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.forth_activity);
  7. }
  8. @Override
  9. public void onClick(View v) {
  10. // TODO Auto-generated method stub
  11. Intent intent=new Intent();
  12. EditText edi_name=(EditText) findViewById(R.id.forth_editText1);
  13. EditText edi_pwd=(EditText) findViewById(R.id.forth_editText2);
  14. String s="用户名是:"+edi_name.getText().toString()+"密码是:"+edi_pwd.getText().toString();
  15. intent.putExtra("name", s);
  16. setResult(2,intent);
  17. finish();
  18. }
  19. }

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号