读书人

Android Intent机制范例详解(Activity

发布时间: 2013-08-22 10:08:34 作者: rapoo

Android Intent机制实例详解(Activity篇)转
package com.tope.samples.intent.simple;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class SimpleIntentTest extends Activity implements View.OnClickListener{ /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. main ); Button startBtn = (Button)findViewById(R.id. start_activity ); startBtn.setOnClickListener( this ); } public void onClick(View v) { switch (v.getId()) { case R.id. start_activity : Intent intent = new Intent( this , TestActivity. class ); startActivity(intent); break ; default : break ; } } }

package com.tope.samples.intent.simple;import android.app.Activity;import android.os.Bundle;public class TestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. test_activity ); }}

I/ActivityManager( 569): Displayed activity com.tope.samples/.SimpleIntentTest: 3018 msI/ActivityManager( 569): Starting activity: Intent { comp={com.tope.samples/com.tope.samples.TestActivity} }D/AndroidRuntime( 932): Shutting down VMW/dalvikvm( 932): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)E/AndroidRuntime( 932): Uncaught handler: thread main exiting due to uncaught exceptionE/AndroidRuntime( 932): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.tope.samples/com.tope.samples.TestActivity}; have you declared this activity in your AndroidManifest.xml?E/AndroidRuntime( 932): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1480)E/AndroidRuntime( 932): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1454)E/AndroidRuntime( 932): at android.app.Activity.startActivityForResult(Activity.java:2656)E/AndroidRuntime( 932): at android.app.Activity.startActivity(Activity.java:2700)E/AndroidRuntime( 932): at com.tope.samples.SimpleIntentTest.onClick(SimpleIntentTest.java:24)…

<? xml version = "1.0" encoding = "utf-8" ?>< manifest xmlns:android = "http://schemas.android.com/apk/res/android" package = "com.tope.samples" android:versionCode = "1" android:versionName = "1.0" > < application android:icon = "@drawable/icon" android:label ="@string/app_name" > < activity android:name = ".SimpleIntentTest" android:label = "@string/app_name" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name ="android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > < activity android:name = ".TestActivity" /> </ application > < uses-sdk android:minSdkVersion = "3" /></ manifest >

package com.tope.samples.intent.cross;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class CrossIntentTest extends Activity implements View.OnClickListener{ /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. main ); Button startBtn = (Button)findViewById(R.id. start_activity ); startBtn.setOnClickListener( this ); } public void onClick(View v) { switch (v.getId()) { case R.id. start_activity : Intent intent = new Intent(); intent.setClassName( "com.tope.samples.intent.simple" , "com.tope.samples.intent.simple.TestActivity" ); startActivity(intent); break ; default : break ; } } }

Intent intent = new Intent();intent.setClassName( "com.tope.samples.intent.simple" , "com.tope.samples.intent.simple.TestActivity" );startActivity(intent);

?

< activity android:name = ".TestActivity" />

?修改为:

< activity   android:name = ".TestActivity" >             < intent-filter >                 < action   android:name = "android.intent.action.DEFAULT"  />             </ intent-filter ></ activity > 

?

package com.tope.samples.intent.implicit;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class ImplicitIntentTest extends Activity implements View.OnClickListener{ /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. main ); Button startBtn = (Button)findViewById(R.id. dial ); startBtn.setOnClickListener( this ); } public void onClick(View v) { switch (v.getId()) { case R.id. dial : Intent intent = new Intent(Intent. ACTION_DIAL ); startActivity(intent); break ; default : break ; } } }

?

<activity android:name = ".TestActivity" > <intent-filter > <action android:name = "android.intent.action.DEFAULT" /> <action android:name = "android.intent.action.DIAL" /> <category android:name = "android.intent.category.DEFAULT" /> </intent-filter > </activity >

?

< action android:name = "android.intent.action.DIAL" />< category android:name = "android.intent.category.DEFAULT" />

?这两行修改了原来的 Intent Filter,这样这个 Activity 才能够接收到我们发送的 Intent 。我们通过这个改动及其作用,可以进一步理解隐式 Intent, Intent Filter 及 Action, Category 等概念—— Intent 发送者设定 Action 来说明将要进行的动作,而 Intent 的接收者在 AndroidManifest.xml 文件中通过设定 Intent Filter来声明自己能接收哪些Intent 。

读书人网 >Android

热点推荐