================================第十一章 Intent原理与使用===============================
---显式Intent
使用步骤:
FirstActivity:
1.声明一个显式Intent
Intent intent = new Intent();//无参构造器
intent.setClass(MainActivity.this, SecondActivity.class);//intent.setClass()方法传入参数
或者
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
2.使用putExtra()方法放入数据//extra 额外的adj
intent.putExtra("key1", "value1");//extra adj额外的 n附加物
intent.putExtra("key2", 0x123);
intent.putExtra("key3", true);
3.使用startActivity(intent)方法跳转
FirstActivity.this.startActivity(intent);
SecondActivity:
1.使用getIntent()获得Intent
Intent intent = getIntent();
2.通过key得到value
String value1 = intent.getStringExtra("key1");
int value2 = intent.getIntExtra("key2", 0);//getIntExtra(key, 数据缺省值)
boolean value3 = intent.getBooleanExtra("key3", false);
FirstActivity代码:
1 btn.setOnClickListener(new View.OnClickListener() 2 { 3 @Override 4 public void onClick(View v) 5 { 6 // 7 //声明一个显式Intent 8 // 9 ntent intent = new Intent();//无参构造器 10 // 11 //intent.setClass()方法传入参数 12 // 13 intent.setClass(MainActivity.this, SecondActivity.class); 14 // 15 //putExtra()传参 16 // 17 intent.putExtra("key1", "value1");//extra adj额外的 n附加物 18 intent.putExtra("key2", 0x123); 19 intent.putExtra("key3", true); 20 // 21 //startActivity(intent)跳转 22 // 23 startActivity(intent); 24 //关闭当前Activity 25 MainActivity.this.finish(); 26 } 27 });
SecondActivity代码:
1 @Override 2 protected void onCreate(Bundle savedInstanceState) 3 { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.activity_second); 6 // 7 //接收Intent传入的数据 8 // 9 //得到Intent 10 Intent intent = getIntent(); 11 //通过key得到value 12 String value1 = intent.getStringExtra("key1"); 13 int value2 = intent.getIntExtra("key2", 0);//getIntExtra(key, 数据缺省值) 14 boolean value3 = intent.getBooleanExtra("key3", false); 15 }
==========================startActivityForResult(intent, 请求码requestCode)-------有数据回传的跳转:==========================
使用步骤:
FirstActivity:
1.声明一个显式Intent
Intent intent = new Intent();//无参构造器
intent.setClass(MainActivity.this, SecondActivity.class);
//intent.setClass()方法传入参数
或者
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
2.使用startActivityForResult(intent, 请求码requestCode) 跳转
MainActivity.this.startActivityForResult(intent, 0x1);
3.重写onActivityResult(int requestCode, int resultCode, Intent data)方法,
FirstActivity返回栈顶时时,回调onActivityResult()方法获取信息
判断请求码requestCode与应答码resultCode正确后,通过key得到value
if(requestCode == 0x1 && resultCode == 0x2)
{
String s = data.getStringExtra("key");
et.setText(s);
et.requestFocus();//获取焦点
et.setSelection(0, s.length());//光标选中字符串0-末尾
}
SecondActivity:
1.获取Intent
Intent intent = getIntent();
2.使用putExtra()方法放入数据
intent.putExtra("key", "value");
3.使用setResult(应答码, intent) 方法对FirstActivity应答
SecondActivity.this.setResult(0x2, intent);
4.关闭SecondActivity,使FirstActivity重新置于栈顶
SecondActivity.this.finish();
FirstActivity代码:
1 public class FirstActivity extends Activity 2 { 3 EditText et; 4 Button btn; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) 8 { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_main); 11 12 initView(); 13 } 14 15 private void initView() 16 { 17 btn = (Button) findViewById(R.id.btn); 18 et = (EditText) findViewById(R.id.et); 19 20 btn.setOnClickListener(new View.OnClickListener() 21 { 22 @Override 23 public void onClick(View v) 24 { 25 Intent intent = new Intent(); 26 intent.setClass(FirstActivity.this, SecondActivity.class); 27 // 28 //startActivityForResult(intent, 请求码requestCode) 跳转 29 // 30 MainActivity.this.startActivityForResult(intent, 0x1); 31 } 32 }); 33 } 34 // 35 //Activity返回栈顶时时,回调onActivityResult()方法获取信息 36 // 37 @Override 38 protected void onActivityResult(int requestCode, int resultCode, Intent data) 39 { 40 super.onActivityResult(requestCode, resultCode, data); 41 if(requestCode == 0x1 && resultCode == 0x2) 42 { 43 String s = data.getStringExtra("name"); 44 et.setText(s); 45 et.requestFocus();//获取焦点 46 et.setSelection(0, s.length());//光标选中字符串0-末尾 47 } 48 } 49 }
SecondActivity代码:
1 public class SecondActivity extends Activity 2 { 3 Button btn1, btn2, btn3; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) 6 { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_second); 9 10 initView(); 11 } 12 13 private void initView() 14 { 15 btn1 = (Button) findViewById(R.id.btn1); 16 btn2 = (Button) findViewById(R.id.btn2); 17 btn3 = (Button) findViewById(R.id.btn3); 18 // 19 //取得Intent 20 // 21 final Intent intent = SecondActivity.this.getIntent(); 22 23 View.OnClickListener listener = new View.OnClickListener() 24 { 25 @Override 26 public void onClick(View v) 27 { 28 switch (v.getId()) 29 { 30 case R.id.btn1: 31 intent.putExtra("name", "按钮1"); 32 break; 33 case R.id.btn2: 34 intent.putExtra("name", "按钮2"); 35 break; 36 case R.id.btn3: 37 intent.putExtra("name", "按钮3"); 38 break; 39 } 40 // 41 //setResult(应答码, intent) 对FirstActivity应答 42 // 43 SecondActivity.this.setResult(0x2, intent); 44 //关闭当前Activity 45 SecondActivity.this.finish(); 46 } 47 }; 48 btn1.setOnClickListener(listener); 49 btn2.setOnClickListener(listener); 50 btn3.setOnClickListener(listener); 51 } 52 }
---隐式Intent
intent-filter 意图过滤器
**注意:可以在不同应用间跳转
FirstActivity代码:
1 Intent intent = new Intent(); 2 intent.setAction("MY_INTENT_ACTIVITY"); 3 intent.addCategory("android.intent.category.DEFAULT"); 4 intent.addCategory("MY_CATEGORY"); 5 MainActivity.this.startActivity(intent);
SecondActivity代码(AndroidManifest.xml):
1 <activity 2 android:name=".SecondActivity" 3 android:label="@string/title_activity_second" > 4 <intent-filter> 5 <action android:name="MY_INTENT_ACTIVITY"/> 6 <category android:name="android.intent.category.DEFAULT"/> 7 <category android:name="MY_CATEGORY"/> 8 </intent-filter> 9 </activity>
//category 类型n
===============更多隐式Intent=====================
隐式Intent跳转打电话页面:
1 Uri uri = Uri.parse("tel:" + phoneNumber);//parse vt. 从语法上描述或分析(词句等) 2 Intent intent = new Intent(Intent.ACTION_CALL,uri); 3 startActivity(intent);
在AndroidManifest.xml中生命打电话权限:
1 <!-- 申明打电话权限--> 2 <uses-permission android:name="android.permission.CALL_PHONE"/>
//permission 许可,批准 n
隐式Intent跳转浏览器网页:
1 Intent intent = new Intent(Intent.ACTION_VIEW); 2 intent.setData(Uri.parse("http://www.baidu.com"));//setData(Uri.parse("....")) 3 startActivity(intent);
或者:
1 Intent intent = new Intent(); 2 intent.setAction(Intent.ACTION_VIEW);//setAction() 3 intent.setData(Uri.parse("http://www.renren.com"));//setData(Uri.parse("....")) 4 startActivity(intent);
隐式Intent跳转联系人页面:
1 Intent intent = new Intent(Intent.ACTION_DIAL); 2 intent.setData(Uri.parse("tel:" + phoneNumber)); 3 startActivity(intent);