玩转Android---组件篇---Intent(意图)
Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”。
?
目标组件一般要通过Intent来声明自己的条件,一般通过组件中的<intent-filter>元素来过滤。
?
Intent在由以下几个部分组成:动作(action),数据(data),分类(Category),类型(Type),组件(Component),和扩展信息(Extra)。
?
Intent在寻找目标组件的时候有两种方法:第一,通过组件名称直接指定;第二,通过Intent Filter过滤指定
?
?
package org.loulijun.calculate;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;public class Calculater extends Activity { /** Called when the activity is first created. */private EditText numberone;private EditText numbertwo;private Button mybutton;private TextView symbol; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); numberone=(EditText)findViewById(R.id.numberone); numbertwo=(EditText)findViewById(R.id.numbertwo); mybutton=(Button)findViewById(R.id.mybutton); symbol=(TextView)findViewById(R.id.symbol); mybutton.setOnClickListener(new Calculate()); } @Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stub menu.add(0, 1, 1, R.string.exit); menu.add(0,2,2,R.string.about);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubif(item.getItemId()==1){finish();}else if(item.getItemId()==2){Toast.makeText(this, "亲爱的你可知,我有多么思念你!", Toast.LENGTH_SHORT).show();}return super.onOptionsItemSelected(item);}class Calculate implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString number1=numberone.getText().toString();String number2=numbertwo.getText().toString();Intent intent=new Intent();intent.putExtra("num1",number1);intent.putExtra("num2", number2);intent.setClass(Calculater.this,Result.class);Calculater.this.startActivity(intent);} }}
?package org.loulijun.calculate;
import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;public class Result extends Activity {private TextView textview;public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.result);textview=(TextView)findViewById(R.id.textview);Intent intent=getIntent();String numberone=intent.getStringExtra("num1");String numbertwo=intent.getStringExtra("num2");Double d1=Double.parseDouble(numberone);Double d2=Double.parseDouble(numbertwo);Double result=d1/d2;textview.setText(numberone+" / "+numbertwo+" = "+result);}}?main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/numberone" android:hint="请输入数字" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/symbol" android:text="@string/symbol" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/numbertwo" android:hint="请输入数字" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/mybutton" android:text="@string/calculate" /></LinearLayout>
?result.xml
?
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/textview" /></LinearLayout>
?
注意:result.java需要注册到AndroidManifest.xml文件中
?
<activity android:name=".Result" android:label="@string/result">
</activity>
?
运行结果如下:


?
例子二:调用系统内置action
?
?
package org.hualang.intent;import android.app.ListActivity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;public class IntentTest extends ListActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 菜单项数组String[] menus = { "查看电话信息", "编辑电话信息", "显示拨打电话界面","直接打电话","访问浏览器","访问地图"};// 将菜单项数组设置为ListView的列表项展示setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menus));getListView().setTextFilterEnabled(true);}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {Intent intent = new Intent();Uri uri ;String data;switch (position) {// 查看_id 为1的用户电话信息case 0:data = "content://contacts/people/1";uri = Uri.parse(data);intent.setAction(Intent.ACTION_VIEW);intent.setData(uri);startActivity(intent);break;// 编辑_id 为1的用户电话信息case 1:data = "content://contacts/people/1";uri = Uri.parse(data);intent.setAction(Intent.ACTION_EDIT);intent.setData(uri);startActivity(intent);break;// 显示拨打电话界面case 2:data = "tel:13800138000";uri = Uri.parse(data);intent.setAction(Intent.ACTION_DIAL);intent.setData(uri);startActivity(intent);break;// 直接打电话case 3:data = "tel:13800138000";uri = Uri.parse(data);intent.setAction(Intent.ACTION_CALL);intent.setData(uri);startActivity(intent);break;// 访问浏览器case 4:data = "http://www.google.com";uri = Uri.parse(data);intent.setAction(Intent.ACTION_VIEW);intent.setData(uri);startActivity(intent);break;// 访问地图case 5:data = "geo:39.92,116.46";uri = Uri.parse(data);intent = new Intent(Intent.ACTION_VIEW,uri);startActivity(intent);break;default:break;}}}?
?main.xml
?
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /></LinearLayout>
?AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.hualang.intent" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".IntentTest" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="8" /><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission></manifest>?
运行结果如下:

?当点击直接打电话后

?
挺好的 2 楼 djx0226 2011-08-28 当点击 “编辑电话信息”的时候会有问题。有error出现,inbackground()错误。