Intent控件
基本概念:
------------------------------------------------------------------------------------------------------------------------------------------------------------
1.Intent是Android应用程序组件之一,是不同组件之间通信的桥梁。
2.Intnet对象在Android系统当中表示一种意图
3.Intent封装了它要执行动作的属性:Action(动作)、Data(数据)、Category(类别)、Type(类型)、Component(组件信息)、Extras(附加信息)
基本用法:
-------------------------------------------------------------------------------------------------------------------------------------------------------------
1.在Activity之间可以通过Intent对象传递数据
2.使用putExtra()系类方法向Intent对象当中存储数据
3.使用getXXXExtra()系类方法从Intent对象当中取出数据
用法实例:
-----------------------------------------------------------------------------------------------------------------------------------------------------------
1.Intent传值求小米的当前市场价格。
第一个Activity的Java文件:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
importandroid.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
publicclassIntentExtra extends Activity {
Button button;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_extra);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new ClickListener());
}
class ClickListenerimplements OnClickListener{
@Override
publicvoid onClick(View v) {
Intent intent =new Intent();
intent.setClass(IntentExtra.this, Second.class);
intent.putExtra("com.example.intent_extra.much", 1699);
intent.putExtra("com.example.intent_extra.name","小米3");
startActivity(intent);
}
}
}
第二个Activity:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
publicclassSecond extends Activity {
TextViewtext;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
text=(TextView)findViewById(R.id.text);
Intentintent=getIntent();
intmuch=intent.getIntExtra("com.example.intent_extra.much", 999);
Stringname=intent.getStringExtra("com.example.intent_extra.name");
text=(TextView)findViewById(R.id.text);
text.setText(name+"的价格是"+much);
}
}
2.拨号程序:
1.借助于Intent,可以轻松实现拨打电话的应用程序,只需声明一个拨号的Intent对象,并使用startActivity()方法。
2.创建Intent对象的代码为 Intent intent=new Intent(action.uri),其中uri是要拨叫的号码数据,通过Uri.parse()方法把"tel:1234"格式的字符串装换为Uri。
3.URI:uniform resource identifier,统一资源标识符。
4.action的两种使用方式:
android.permission.CALL_PHONE 直接呼叫
Intent.Action_DIAL 启动系统的拨号应用程序
5.在AndroidManifest.xml文件中注册拨号权限:
<uses-permission android:name="android.permission.CALL_PHONE"/>
布局略(包含一个button,一个edittext)
Java代码:
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
publicclass MainActivity extends Activity {
private Button button;
private EditText edittext;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new ClickListener());
}
publicclass ClickListener implements OnClickListener {
@Override
publicvoid onClick(View v) {
// TODO Auto-generated methodstub
edittext=(EditText)findViewById(R.id.edittext);
String number = edittext.getText().toString();
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
+ number));
startActivity(intent);
}
}
}
完事别忘了注册一下。
3。发送短信:
发送短信使用的是android.telephony.SmsManager类的sendTextMessage方法,该方法参数如下:
destinationAddress:表示接收短信的手机号码
scAddress:短信服务中心号码,设置为null表示使用手机默认的短信服务中心号码
text:要发送的短信内容
sentIntent:当消息成功发送给接收者时,广播该结果
deliveryIntent:当消息被成功发送时,广播该结果
最后在AndroidManifest.xml文件中注册该发送短信的权限
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top"
android:orientation="vertical" >
<TextView
android:id="@+id/tv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:text="对方号码"
android:textSize="20sp"
android:textStyle="bold" />
<EditText
android:id="@+id/smstel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="normal" />
<TextView
android:id="@+id/tv02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="短信内容"
android:textSize="20sp"
android:textStyle="bold" />
<EditText
android:id="@+id/smscontent"
android:layout_width="match_parent"
android:layout_height="280dp"
android:gravity="top|left"
android:singleLine="false"
android:textStyle="normal" />
<Button
android:id="@+id/smssend"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送短信"
android:textSize="20sp" />
</LinearLayout>
Java文件:
import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
publicclass SmsTest extends Activity {
private Button button;
private EditText editText1,editText2;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms_test);
button=(Button)findViewById(R.id.smssend);
button.setOnClickListener(new ClickListener());
}
class ClickListener implements OnClickListener{
@Override
publicvoid onClick(View v) {
// TODO Auto-generated methodstub
editText1=(EditText)findViewById(R.id.smstel);
editText2=(EditText)findViewById(R.id.smscontent);
String number=editText1.getText().toString();
String letter=editText2.getText().toString();
if(number.equals("")||letter.equals("")){
Toast.makeText(SmsTest.this, "输入有误,请检查输入", 1).show();
}else{
SmsManagermessage=SmsManager.getDefault();
message.sendTextMessage(number,null, letter, null, null);
Toast.makeText(SmsTest.this, "短信发送成功", 1).show();
}
}
}
}
4.广播
(Broastcast):
广播是Android系统中应用程序间通信的手段,当有特定事件发生时,如有来电、有短信、电池电量发生变化等事件发生时,Android系统都会产生特定的Intent对象并且自动进行广播,而处理的形式由用户自己决定。
在Android系统中,开发者可以定义自己的广播组件,但所有的广播组件都是以一个类的形式出现,而且该类必须继承自BroadcastReceiver类,而后还需向Android系统注册。
发送广播需要创建Intent对象,可调用sendBroastcast(Intent)方法将广播发出。
接受广播需要一个继承BroadcastReceiver的类来实现,继承该类后覆写其onReceiver方法,并在该方法中响应事件。
注册方式分为静态和动态:
静态方式在AndroidManifest.xml文件的Application里面定义Receiver并设置要接收的Action.
动态方式在Activity里面调用方法来注册.
例题:检测手机电量,并动态注册广播接收方式
布局文件xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ToggleButton
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textOff="停止检测"
android:textOn="检测当前手机电量" />
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TextView>
</LinearLayout>
主java文件:
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
import android.widget.ToggleButton;
publicclass BatteryActivity extends Activity {
private ToggleButton button;
private TextView text;
BroadcastReceiver receiver;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_battery);
button=(ToggleButton)findViewById(R.id.button);
text=(TextView)findViewById(R.id.text);
receiver=new BroadcastReceiver() {
@Override
publicvoid onReceive(Context context, Intent intent) {
Stringaction=intent.getAction();
if(Intent.ACTION_BATTERY_CHANGED.equals(action)){
//获取当前电池的电量
intcurrent=intent.getExtras().getInt("level");
//获取总电量
inttotal=intent.getExtras().getInt("scale");
int value=current*100/total;
text.setText("当前电量是"+value+"%");
}
}
};
button.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
publicvoid onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked){
//用于确定当前BroadcastReceiver对象接收的Intent对象的类型
IntentFilter filter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
//动态注册receiver
registerReceiver(receiver, filter);
}else{
//注销注册
unregisterReceiver(receiver);
text.setText("");
}
}
});
}
}+