少年意气强不羁,虎胁插翼白日飞。这篇文章主要讲述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
推荐阅读
- Android Studio开发基础之自定义View组件
- Android背景渐变色(shape,gradient)
- Android 性能测试——Memory Monitor 工具
- Android 6.0 源代码编译实践
- Android界面设计尺寸
- React Native编译错误(ReactAndroid:buildReactNdkLib FAILED)
- 算法设计(在数组中找到对数(x, y),使得x^y大于y^x)
- CSS图片库(图库)设计详细实现代码
- JavaScript比较不区分大小写的字符串