您的位置:首页 > 移动开发 > Android开发

Android Intent信使使用

2017-04-20 19:30 253 查看
Intent:(启动activity,启动service,发送广播都可以传输数据)

1:启动Activity

Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);


2:启动service

Intent intent = new Intent(this, MusicService.class);
intent.putExtra("path", m.getMusicPath());
startService(intent);


3:停止service:

Intent intent = new Intent("com.tarena.action.MY_SERVICE");
stopService(intent);

intent = new Intent(this, MusicPlayService.class);
stopService(intent);


4:启动sms

Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:5556"));


5:发送广播,传递数据

Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.parse("file://" + Environment.getExternalStorageState()));
sendBroadcast(intent);


6:销毁滞留广播.

Intent intent = new Intent("com.tarena.action.STICKY_BROADCAST");
removeStickyBroadcast(intent);


7:startActivity()—–传递ContactInfo

ContactsActivity启动DetailsActivity并传递数据:

Intent intent = new Intent(Day20_03_ContactsActivity.this,DetailsActivity.class);
intent.putExtra("contact", adapter.getItem(position));// 传递数据,具体联系人.
startActivity(intent);


DetailsActivity接收来自ContactsActivity数据:

ContactInfo contact = (ContactInfo) getIntent().getSerializableExtra("contact");
// 显示头像
if (contact != null) {
Bitmap bm = biz.getPhoto(contact.getId());
if (bm != null)
ivPhoto.setImageBitmap(bm);
else
ivPhoto.setImageResource(R.drawable.ic_launcher);
//显示姓名和号码和邮箱信息.
tvName.setText(contact.getName());
tvInfo.setText(contact.toString());
}


8:startActivity()—–传递Student和opType:可以对比第9个

MainActivity发送:

//点击修改按钮
Intent intent = new Intent(this, StudentOPActivity.class);
intent.putExtra(GolbalUtils.EXTRA_OP_TYPE,GolbalUtils.OP_TYPE_UPDATE);
intent.putExtra(GolbalUtils.EXTRA_OP_DATA, stu);
startActivity(intent);

//点击添加按钮
Intent intent = new Intent(this, StudentOPActivity.class);
intent.putExtra(GolbalUtils.EXTRA_OP_TYPE, GolbalUtils.OP_TYPE_ADD);
startActivity(intent);


StudentOPActivity接收:

//setupView()方法中
opType = getIntent().getIntExtra(GolbalUtils.EXTRA_OP_TYPE,GolbalUtils.OP_TYPE_ADD);
switch (opType) {
case GolbalUtils.OP_TYPE_ADD:
btnOP.setText("添加");
break;
case GolbalUtils.OP_TYPE_UPDATE:
btnOP.setText("修改");
Student stu = (Student) getIntent().getSerializableExtra(GolbalUtils.EXTRA_OP_DATA);
if (stu != null) {
etId.setText(stu.getId() + "");
etName.setText(stu.getName());
}
break;
}

//doClick(View v)方法中
public void doClick(View v) {
Student stu = new Student();
stu.setName(etName.getText().toString());
stu.setAge(Integer.parseInt(etAge.getText().toString()));
stu.setSex(rgSex.getCheckedRadioButtonId() == R.id.rdoMale ? "男" : "女");

//直接操作数据库
switch (opType) {
case GolbalUtils.OP_TYPE_ADD:
biz.addStudent(stu);
break;
case GolbalUtils.OP_TYPE_UPDATE:
stu.setId(Integer.parseInt(etId.getText().toString()));
biz.updateStudent(stu);
break;
}

finish();
}


9:startActivityForResult()和setResult()配合使用—在MainActivity中startActivityForResult()跳转到ProductFormActivity,并重写

onActivityResult()方法,用来接收ProductFormActivity回传的数据,在ProductFormActivity中的btnClicked方

法中只要setResult()后finish()自己即可.可以对比第8个

MainActivity中发送:

//点击添加按钮
Intent intent = new Intent(this, ProductFormActivity.class);
intent.putExtra(Constants.EXTRA_KEY_FORM_TYPE,Constants.FORM_TYPE_ADD);
startActivityForResult(intent,Constants.FORM_TYPE_ADD);

//点击编辑按钮
Intent intent = new Intent(this, ProductFormActivity.class);
intent.putExtra(Constants.EXTRA_KEY_FORM_TYPE,Constants.FORM_TYPE_EDIT);
intent.putExtra(Constants.EXTRA_KEY_PRODUCT, (Product) this.adapter.getItem(i));
startActivityForResult(intent, Constants.FORM_TYPE_EDIT);

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "您取消了操作", Toast.LENGTH_SHORT).show();
return;
}
// 接收ProductFormActivity中btnClicked()方法中返回的结果product信息
Product m = (Product) data.getSerializableExtra(Constants.EXTRA_KEY_PRODUCT);
// 判断请求码是添加还是修改,在这里操作数据库
switch (requestCode) {
case Constants.FORM_TYPE_ADD: {
this.productService.add(m);// 完成添加
}
break;
case Constants.FORM_TYPE_EDIT: {
this.productService.update(m);// 完成更改
}
break;
}
}


ProductFormActivity中接收:

//setViews()方法中
Intent intent = getIntent();
int type = intent.getIntExtra(Constants.EXTRA_KEY_FORM_TYPE,-1);
switch (type) {
case Constants.FORM_TYPE_ADD: {
btn1.setText("添加");
}
break;
case Constants.FORM_TYPE_EDIT: {
btn1.setText("修改");

Product m = (Product) intent.getSerializableExtra(Constants.EXTRA_KEY_PRODUCT);
etId.setText(String.valueOf(m.getId()));
etName.setText(m.getName());
etPrice.setText(String.valueOf(m.getPrice()));
}

public void btnClicked(View view) {
switch (view.getId()) {
case R.id.btn1: {
// 用户输入内容包装为Product
Product m = new Product();
m.setId(Integer.parseInt(etId.getText().toString()));
m.setName(etName.getText().toString());
m.setPrice(Double.parseDouble(etPrice.getText().toString()));

// 在Intent中绑定Music对象,向上一窗口回传,注意intent没有启动的具体activity
Intent intent = new Intent();
intent.putExtra(Constants.EXTRA_KEY_PRODUCT, m);
// 设置回传的数据,会将数据Product自动返回MainActivity里,参数: 结果码, 数据
setResult(RESULT_OK, intent);// 结果码设置为OK
}
break;
case R.id.btn2: {
setResult(RESULT_CANCELED);// 结果码设置为CANCELED
}
break;
}
finish();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息