0 Comments

自定义Activity Action

发布于:2012-11-21  |   作者:广州网站建设  |   已聚集:人围观
自定义Activity Action

工程目录:src\ch09\ch09_custom_action、src\ch09\ch09_client_action    广州网站设计

在4.1.3小节曾介绍了在AndroidManifest.xml文件中为Activity定义Action,但都是在应用程序内部调用,实际上,这些自定义的Action同样可以在其他应用程序中调用。现在我们来看一个实际的例子,其中ch09_custom_action工程中有一个MyActivity,该类的定义代码如下:

广州网站设计
  1. <activity androidandroid:name=".MyActivity"android:label="MyActivity"> 
  2.     <intent-filter>         
  3.         <!--  自定义的Action -->           
  4.         <action android:name="android.intent.action.MyActivity" /> 
  5.         <category android:name="android.intent.category.DEFAULT" /> 
  6.     </intent-filter> 
  7. </activity> 

在ch09_custom_action和ch09_client_action中都可以使用下面的代码来调用MyActivity。


  1. Intent intent = new Intent("android.intent.action.MyActivity");  
  2. startActivity(intent); 

如果我们定义的Action在系统中还有其他的程序也定义了,在使用该Action时就会弹出类似如图9.10所示的选择菜单。例如,我们按照如下的代码来修改MyActivity的定义。

广州网站建设
  1. <activity android:name=".MyActivity" android:label="MyActivity"> 
  2.     <intent-filter>                  
  3.         <action android:name="android.intent.action.MyActivity" /> 
  4.         <action android:name="android.intent.action.GET_CONTENT" /> 
  5.         <data android:mimeType="audio/*" /> 
  6.         <category android:name="android.intent.category.DEFAULT" /> 
  7.     </intent-filter> 
  8. </activity> 

在上面的代码中为MyActivity添加了一个Action和一个mimeType,首先运行ch09_custom_ action,然后在ch09_client_action中使用如下的代码来调用MyActivity。


  1. Intent intent = new Intent("android.intent.action.GET_CONTENT");  
  2. intent.putExtra("data", "参数值");  
  3. intent.setType("audio/*");  
  4. startActivity(intent);  

现在来运行ch09_client_action,并通过上面的代码来访问MyActivity,会弹出如图9.11所示的3个菜单项。如果在MyActivity类中的onCreate方法中使用下面的代码可以获得由ch09_client_action传递的data参数值。

广州网站建设
  1. String data = getIntent().getStringExtra("data");  
  2. if (data != null)  
  3.     setTitle(data);  
图9.11  拥有音频处理动作的MyActivity
要注意的是,如果在定义MyActivity时加上了mimeType,那么在使用android.intent.action.MyActivity动作时也要加上mimeType,否则会抛出无法找到相应Action的异常,代码如下:

  1. Intent intent = new Intent("android.intent.action.MyActivity");  
  2. intent.setType("audio/*");  
  3. startActivity(intent); 
飞机