intent 组件
来源:互联网 发布:淘宝联盟怎么赚不到钱 编辑:程序博客网 时间:2024/06/10 11:46
Intent(意图)主要是解决Android应用的各项组件之间的通讯。也可以应用与程序内部,activity,service,broadcast receiver 之间交互
listActivity需要构造一个 Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。
intent 相关属性方法
1.component(组件):目的组件
2.action(动作):需要表现的意图的行动
3.category(类别): 用来表现动作的类别
4.data(数据):表示与动作action需要操作的数据
5.type(数据类型):对于data范例的描写
6.extras(扩展信息):扩展信息
7.flags(标志位):期望这个意图的运行模式
1.
OtherActivity.java
自定义action标记,命名规范:包名+action
public static final String MY_ACTION = "com.android4_4.action.MY_ACTION "
2. 自定义activity组件式,必须添加一个默认类别category
多个activity有相同action标记,弹出列表让用户自行选择
AndroidManifest.xml
<activity
android:name=".IntentMainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.android4_4.action.MY_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
3.MainActivity.java
Intent intent = new Intent();
intent.setAction(OtherActivity.MY_ACTION);
startAction(intent);
Category(类别):用来表现动作的类型,也作为<intent-filter>子元素声明,一般配合action(动作)
category 可以有多个,满足条件必须是全部category 匹配,action 只能有一个
<category android:name="com.android4_4.action.MY_CATEGORY ">
<category android:name="com.android4_4.action.MY_CATEGORY_2 ">
//调用方法 mIntent.addCategory(category)
Data(数据):表示与动作action需要操作的数据Uri data=Uri.parse("www.baidu.com");
intent.setAction(Intent.ACTION_VIEW);
//调用方法ntent.setData(data);
默认浏览器被匹配 action+data ;Intent.ACTION_CALL 打电话 等等。。。
intent data+type属性说明
type表示数据类型或者MIME类型 如(text/html,text/xml.image/jpg ...)
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri data = Uri.parse("file///sdcard/xpg.mp3");
//Uri data = Uri.parse("/sdcard/xpg.mp3"); 也可以这样写
intent.setData();
intent.setType();
intent.setDataAndType(data,"audio/mp3"); //数据 ,数据类型
//setData(),setType(),只允许单独设置一个,每个方法里都把另一个方法属性置空
系统根据类型匹配 播放xpg.mp3
7.flags 标志位 :期望这个意图的运行模式
1.
一个程序启动后系统为这个程序分配一个task使用,一个task可以有多个activity,
同一个程序也可以拥有多个task,涉及到加载activity的四种模式, standard,singleTop, singleTask,singleInstance
在AndroidManifest.xml中设置activity标签属性launchMode中设置该activity的加载模式
2.
Intent intent=new Intent(this,OtherActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//相当于在配置文件中:singleTask
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)//singleTop;
startActivity(intent);
栈结构
standard:默认模式,每次启动都会创建一个新的activity实例,放到目标task任务栈顶端
singleTop:判断当前任务栈顶是否存在相同的activity,如果存在,就不创建新的activity实例
singleTask:在任务栈中判断是否有相同的activity,如果存在,清楚该activity之上的其他activity并显示本activity(该activity此时在栈顶)
singleInstance:单实例任务,在一个新的task任务栈中创建activity实例,并且该task只允许存在该activity一个对象,在此调用该activity之间使用该activity对象,并不从新创建新的activity
public class MainActivity extends Activity {private Button smsbut,intentbut;private EditText edit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.linear); smsbut = (Button) findViewById(R.id.smsButton); intentbut = (Button) findViewById(id.intentBut); edit = (EditText) findViewById(id.edit); } public void Butlistener(View v){ //数据get提交到服务器 AsyncHttpClient client = new AsyncHttpClient(); client.get("www.baidu.com", new AsyncHttpResponseHandler() {@Overridepublic void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {Toast.makeText(getApplicationContext(), "登陆成功", 0).show();}@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {Toast.makeText(getApplicationContext(), "登陆失败", 0).show();}}); } public void PostBut(View v){ //数据post提交到服务器 AsyncHttpClient client = new AsyncHttpClient(); String url ="www.baidu.com"; RequestParams params = new RequestParams(); params.put("username", "james"); params.put("password", "123456");client.post(url, params, new AsyncHttpResponseHandler() {@Overridepublic void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {Toast.makeText(getApplicationContext(), "登陆成功", 0).show();}@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {Toast.makeText(getApplicationContext(), "登陆失败", 0).show();}}); } //intent 启动 短信activity public void smsButlistener(View v){ Intent intent = new Intent(); //设置意图对象 intent.setAction("android.intent.action.SENDTO"); intent.addCategory("android.intent.category.DEFAULT"); intent.setData(Uri.parse("sms:1864748483")); startActivity(intent);//启动activity } //显示意图向其他activity 发送数据 public void otherActivityButlistener(View v){ Intent intent = new Intent(this,OtherActivity.class); intent.putExtra("name", edit.getText().toString());//put 数据 支持java8大类型 startActivity(intent);//启动activity } }OtherActivity.java
public class OtherActivity extends Activity {TextView textView;ProgressBar progressBar2;//进度条@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_other);textView = (TextView) findViewById(id.textView);progressBar2 = (ProgressBar) findViewById(id.progressBar2);Intent intent = getIntent();String name = intent.getStringExtra("name");Random random = new Random();int rp = random.nextInt(100);textView.setText(name+" 人品值:"+rp);progressBar2.setMax(100);progressBar2.setProgress(rp);//设置progress bar}}
- Intent组件
- intent 组件
- Intent组件
- intent 组件
- Intent组件
- Intent组件
- android组件之Intent
- Intent组件--属性说明
- Android Intent组件使用
- Android组件之Intent
- Android Intent组件使用
- Android Intent组件使用
- Android Intent组件使用
- androdi组件之Intent
- android组件-Intent
- Android Intent组件
- 使用Intent启动组件
- Android组件通信--Intent
- Android有两种方法检测USB设备插入
- OS X 10.8 系统上打开 Web Sharing
- MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题
- 我想我已爱上你——下机之策略模式(一)
- 音视频开发技术之自主集成第三方编解码器
- intent 组件
- 使用Python进行字符串加密 利用win32com.client和CAPICOM
- 外包服务
- 微信开发中如何调用自己写的webservice
- 轻博客始祖Tumblr:哈希以支撑2.3万Blog请求/秒
- vim显示行号、语法高亮、自动缩进的设置
- python中的None
- NSArray的sorting排序
- SMARTFORMS生成PDF