android的Intent
//通过制定setComponent来启动组件publicvoidstart(Viewview){//创建一个意图//Intentintent=newIntent(this,MainActivity2.class);Intentintent=newIntent();//创建组件,通过组件响应,直接IntentComponentNamecomponent=newComponentName(this,MainActivity2.class);intent.setComponent(component);startActivity(intent);}
publicvoidstart1(Viewview){Intentintent=newIntent(this,MainActivity9.class);startActivity(intent);}
通过action属性查找启动activity,必须在清单文件中进行配置
//通过action属性查找启动activitypublicvoidstart2(Viewview){Intentintent=newIntent();//设置动作,实际上action就是字符串标记而已intent.setAction(MainActivity3.MY_ACTION);startActivity(intent);}
MainActivity3
packagecom.example.intent;importandroid.app.Activity;importandroid.os.Bundle;/***在自定义动作时,使用action组件时,必须添加一个默认类别*<activityandroid:name="MainActivity3"><intent-filter><actionandroid:name="com.example.action.MY_ACTION"></action><categoryandroid:name="android.intent.category.DEFAULT"/></intent-filter>*如果有多个组件被匹配成功,就会对话框列表的形式让用户进行选择**/publicclassMainActivity3extendsActivity{//自定义action标记publicstaticfinalStringMY_ACTION="com.example.action.MY_ACTION";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main3);}}
清单文件中的配置,如果没有类别,必须写上默认类别
<category android:name="android.intent.category.LAUNCHER" />
<applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activityandroid:name=".MainActivity"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity>
加入的类别越多,越精确,如果有找不到的类别会报错(假设有两个类别,一个类别未找到,则报错)
publicvoidstart3(Viewview){Intentintent=newIntent();intent.setAction(MainActivity4.MY_ACTION);intent.addCategory(MainActivity4.MY_CATEGORY);//如果MainActivity4中没有在清单文件中配置,且写了下面的类别,则会报错//intent.addCategory(MainActivity4.MY_CATEGORY2);//加入的类别越多,越精确,如果有找不到的类别会报错startActivity(intent);}
MainActivity4
packagecom.example.intent;importandroid.app.Activity;importandroid.os.Bundle;/***自定义类别*在Intent中可以添加多个类别*那就要求被匹配的组件必须同时满足这多个类别才能匹配成功,否则匹配失败***/publicclassMainActivity4extendsActivity{//自定义动作类别publicstaticfinalStringMY_CATEGORY="com.example.category.myCategory";publicstaticfinalStringMY_CATEGORY2="com.example.category.myCategory2";//自定义动作publicstaticfinalStringMY_ACTION="com.example.action.myAction2";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main4);}}
清单文件中的MainActivity4
<activityandroid:name="MainActivity4"><intent-filter><!--<actionandroid:name="com.example.action.MY_ACTION"></action>--><actionandroid:name="com.example.action.myAction2"></action><categoryandroid:name="com.example.category.myCategory"/><categoryandroid:name="com.example.category.myCategory2"/><categoryandroid: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);
packagecom.example.intent;importandroid.app.Activity;importandroid.content.Intent;importandroid.net.Uri;importandroid.os.Bundle;importandroid.view.View;/***intent中的Date属性*Date属性表示动作(要操作)的数据*实际上一个Date是用一个URI对象表示*通常情况下,使用action+date属性的组合来描述一个意图(intent)****当Intent匹配的组件有多个时,先显示优先级高的组件,如果优先级相同,显示列表让用户自己选择*优先级从-1000到1000,并且其中一个必须为负值才有效**/publicclassMainActivity5extendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main5);}publicvoidtestActionDateClick(Viewivew){Intentintent=newIntent();intent.setAction(Intent.ACTION_VIEW);Uriuri=Uri.parse("http://java.lampbrother.net");intent.setData(uri);startActivity(intent);}publicvoidtestActivity7(Viewview){Intentintent=newIntent(this,MainActivity7.class);startActivity(intent);}}
清单文件中MainActivity5的配置
<activityandroid:name="MainActivity5"></activity><activityandroid:name="MainActivity6"><intent-filterandroid:priority="800"><actionandroid:name="android.intent.action.VIEW"/><dataandroid:scheme="http"android:host="java.lampbrother.net"/><categoryandroid:name="android.intent.category.DEFAULT"/></intent-filter></activity>
Intent
date+type属性
type表示数据的类型或者MIME类型(如:text/xml,text/html,audio/mp3,p_w_picpath/png...)
date和type属性,一般只需要一个
通过setDate方法会把type实行设置为null,相反,设置setType也会把date属性设置为null
如果想要两个属性同时设置,要使用setDateAndType方法设置
MianActivity7:调用系统选择(各种)文件,以mp3文件为例,
packagecom.example.intent;importandroid.app.Activity;importandroid.content.Intent;importandroid.net.Uri;importandroid.os.Bundle;importandroid.view.View;/***Intent*date+type属性*type表示数据的类型或者MIME类型(如:text/xml,text/html,audio/mp3,p_w_picpath/png...)*date和type属性,一般只需要一个*通过setDate方法会把type实行设置为null,相反,设置setType也会把date属性设置为null*如果想要两个属性同时设置,要使用setDateAndType方法设置***/publicclassMainActivity7extendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main7);}publicvoidplay7(Viewview){Intentintent=newIntent();intent.setAction(Intent.ACTION_VIEW);Uridate=Uri.parse("file:///sdcard/xx.mp3");//intent.setData(date);//intent.setDataAndType(data,type);intent.setType("audio/mp3");startActivity(intent);}}
MainActivity8
packagecom.example.intent;importandroid.app.Activity;importandroid.content.Intent;importandroid.net.Uri;importandroid.os.Bundle;importandroid.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属性也可以指定启动模式*****/publicclassMainActivity8extendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main8);}publicvoidstart1(Viewview){Intentintent=newIntent(this,MainActivity9.class);startActivity(intent);}publicvoidstart2(Viewview){Intentintent=newIntent(this,MainActivity8.class);//相当于singleTask//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//相当于singleTop//intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);startActivity(intent);}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。