android的Intent

少年意气强不羁,虎胁插翼白日飞。这篇文章主要讲述android的Intent相关的知识,希望能为你提供帮助。

                //通过制定setComponent来启动组件 public  void  start(View  view){ //创建一个意图 //Intent  intent=new  Intent(this,MainActivity2.class); Intent  intent=new  Intent(); //创建组件,通过组件响应,直接Intent ComponentName  component=new  ComponentName(this,  MainActivity2.class); intent.setComponent(component); startActivity(intent); }

                public  void  start1(View  view){ Intent  intent=new  Intent(this,MainActivity9.class); startActivity(intent); }

通过action属性查找启动activity,必须在清单文件中进行配置
                //通过action属性查找启动activity public  void  start2(View  view){ Intent  intent=new  Intent(); //设置动作,实际上action就是字符串标记而已 intent.setAction(MainActivity3.MY_ACTION); startActivity(intent); }

MainActivity3

package  com.example.intent; import  android.app.Activity; import  android.os.Bundle; /**   *  在自定义动作时,使用action组件时,必须添加一个默认类别   *  < activity  android:name="MainActivity3">                             < intent-filter  >                                     < action  android:name="com.example.action.MY_ACTION">                                     < /action>                                     < category  android:name="android.intent.category.DEFAULT"/>       < /intent-filter>         *  如果有多个组件被匹配成功,就会对话框列表的形式让用户进行选择   *  */ public  class  MainActivity3  extends  Activity{ //自定义action标记 public  static  final  String  MY_ACTION="com.example.action.MY_ACTION"; @Override protected  void  onCreate(Bundle  savedInstanceState)  { //  TODO  Auto-generated  method  stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); } }

清单文件中的配置,如果没有类别,必须写上默认类别
< category android:name="android.intent.category.LAUNCHER" />
    < application                 android:allowBackup="true"                 android:icon="@drawable/ic_launcher"                 android:label="@string/app_name"                 android:theme="@style/AppTheme"  >                 < activity                         android:name=".MainActivity"                         android:label="@string/app_name"  >                         < intent-filter>                                 < action  android:name="android.intent.action.MAIN"  />                                 < category  android:name="android.intent.category.LAUNCHER"  />                         < /intent-filter>                 < /activity>

加入的类别越多,越精确,如果有找不到的类别会报错(假设有两个类别,一个类别未找到,则报错)
public  void  start3(View  view){ Intent  intent=new  Intent(); intent.setAction(MainActivity4.MY_ACTION); intent.addCategory(MainActivity4.MY_CATEGORY); //如果MainActivity4中没有在清单文件中配置,且写了下面的类别,则会报错 //intent.addCategory(MainActivity4.MY_CATEGORY2); //加入的类别越多,越精确,如果有找不到的类别会报错 startActivity(intent); }

MainActivity4

package  com.example.intent; import  android.app.Activity; import  android.os.Bundle; /**   *  自定义类别   *  在Intent中可以添加多个类别   *  那就要求被匹配的组件必须同时满足这多个类别才能匹配成功,否则匹配失败   *    *  */ public  class  MainActivity4  extends  Activity{ //自定义动作类别 public  static  final  String  MY_CATEGORY="com.example.category.myCategory"; public  static  final  String  MY_CATEGORY2="com.example.category.myCategory2"; //自定义动作 public  static  final  String  MY_ACTION="com.example.action.myAction2"; @Override protected  void  onCreate(Bundle  savedInstanceState)  { //  TODO  Auto-generated  method  stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main4); } }

清单文件中的MainActivity4

  < activity  android:name="MainActivity4">                             < intent-filter  >                                 < !--      < action  android:name="com.example.action.MY_ACTION"> < /action>   -->                                     < action  android:name="com.example.action.myAction2"> < /action>                                     < category  android:name="com.example.category.myCategory"/>                                     < category  android:name="com.example.category.myCategory2"/>                                     < category  android:name="android.intent.category.DEFAULT"/>                                     < !--  没有类别时要加上默认类别  -->     < /intent-filter>   < /activity>

  intent中的Date属性
  Date属性表示动作(要操作)的数据
  实际上一个Date是用一个URI对象表示
  通常情况下,使用action+date属性的组合来描述一个意图(intent)
  当Intent匹配的组件有多个时,先显示优先级高的组件,如果优先级相同,显示列表让用户自己选择
  优先级从-1000到1000,并且其中一个必须为负值才有效




MainActivity5:指定访问一个网址


                                < intent-filter android:priority="800">
                    < action android:name="android.intent.action.VIEW"/>
                    < data android:scheme="http" android:host="java.lampbrother.net"/>
                < category android:name="android.intent.category.DEFAULT"/>
                < /intent-filter>




Intent intent=new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri=Uri.parse("http://java.lampbrother.net");
intent.setData(uri);
startActivity(intent);
package  com.example.intent; import  android.app.Activity; import  android.content.Intent; import  android.net.Uri; import  android.os.Bundle; import  android.view.View; /**   *  intent中的Date属性   *  Date属性表示动作(要操作)的数据   *  实际上一个Date是用一个URI对象表示   *  通常情况下,使用action+date属性的组合来描述一个意图(intent)   *    *    *    *  当Intent匹配的组件有多个时,先显示优先级高的组件,如果优先级相同,显示列表让用户自己选择   *  优先级从-1000到1000,并且其中一个必须为负值才有效   *  */ public  class  MainActivity5  extends  Activity{ @Override protected  void  onCreate(Bundle  savedInstanceState)  {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main5); } public  void  testActionDateClick(View  ivew){ Intent  intent=new  Intent(); intent.setAction(Intent.ACTION_VIEW); Uri  uri=Uri.parse("http://java.lampbrother.net"); intent.setData(uri); startActivity(intent); } public  void  testActivity7(View  view){ Intent  intent=new  Intent(this,MainActivity7.class); startActivity(intent); } }

清单文件中MainActivity5的配置
                  < activity  android:name="MainActivity5"> < /activity>                         < activity  android:name="MainActivity6">                                 < intent-filter  android:priority="800">                                         < action  android:name="android.intent.action.VIEW"/>                                         < data  android:scheme="http"  android:host="java.lampbrother.net"/>                                 < category  android:name="android.intent.category.DEFAULT"/>                                 < /intent-filter>                   < /activity>

Intent
  date+type属性
  type表示数据的类型或者MIME类型(如:text/xml,text/html,audio/mp3,image/png...)
  date和type属性,一般只需要一个
  通过setDate方法会把type实行设置为null,相反,设置setType也会把date属性设置为null
  如果想要两个属性同时设置,要使用setDateAndType方法设置




MianActivity7:调用系统选择(各种)文件,以mp3文件为例,
package  com.example.intent; import  android.app.Activity; import  android.content.Intent; import  android.net.Uri; import  android.os.Bundle; import  android.view.View; /**   *  Intent   *  date+type属性   *  type表示数据的类型或者MIME类型(如:text/xml,text/html,audio/mp3,image/png...)   *  date和type属性,一般只需要一个   *  通过setDate方法会把type实行设置为null,相反,设置setType也会把date属性设置为null   *  如果想要两个属性同时设置,要使用setDateAndType方法设置   *    *  */ public  class  MainActivity7  extends  Activity{ @Override protected  void  onCreate(Bundle  savedInstanceState)  { //  TODO  Auto-generated  method  stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main7); } public  void  play7(View  view){ Intent  intent=new  Intent(); intent.setAction(Intent.ACTION_VIEW); Uri  date=Uri.parse("file:///sdcard/xx.mp3"); //intent.setData(date); //intent.setDataAndType(data,  type); intent.setType("audio/mp3"); startActivity(intent); } }

MainActivity8

package  com.example.intent; import  android.app.Activity; import  android.content.Intent; import  android.net.Uri; import  android.os.Bundle; import  android.view.View; /**   *  activity的启动模式:4种   *  1.standard  标准模式,每次启动都会创建一个新的activity,加入目标任务的栈顶   *  2.singleTop,判断当前任务栈顶是否存在相同的activity,如果存在直接使用   *  如果不存在,那么创建新的activity对象放入栈顶   *  3.singleTask:在任务栈中是会判断否存在相同的activity,如果存在,那么会清除该activity之上的其他activity对象来显示   *  如果不存在,创建新的activity对象放入栈顶   *  4.singleInstance:会在一个新的任务栈中创建activity,并且该任务栈中只允许存在一个activity实例,   *  其他调用该activity的组件会直接使用该任务栈中的activity对象   *    *  Intent的flags属性也可以指定启动模式   *    *    *    *  */ public  class  MainActivity8  extends  Activity{ @Override protected  void  onCreate(Bundle  savedInstanceState)  { //  TODO  Auto-generated  method  stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main8); } public  void  start1(View  view){ Intent  intent=new  Intent(this,MainActivity9.class); startActivity(intent); } public  void  start2(View  view){ Intent  intent=new  Intent(this,MainActivity8.class); //相当于singleTask //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //相当于singleTop //intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } }



【android的Intent】本文出自 “matengbing” 博客,请务必保留此出处http://matengbing.blog.51cto.com/11395502/1883732

    推荐阅读