使用Sniffer Pro监控网络流量
2009-06-21 23:16
411 查看
android Activity之间的跳转不只是有startActivity(Intent i)的,startActivityForResult(Intent intent, int requestCode)也是常用的
方法。
在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这个时候就要用到回调函数onActivityResult()。
需要注意三个方法:startActivityForResult(Intent intent, int requestCode),onActivityResult(int requestCode, int resultCode, Intent data),setResult(int resultCode, Intent data).
例如如下代码:从From跳转至ToB和ToC
From:
if(条件){
Intent intent = new Intent(this, ToB.class);
startActivityForResult(intent, REQUEST_CODE_01);//跳转至ToB
}else{
Intent intent = new Intent(this, ToC.class);
startActivityForResult(intent, REQUEST_CODE_02);//跳转至ToC
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode) {//请求标记
case REQUEST_CODE_01:
if(resultCode==Activity.RESULT_OK)
//do something
break;
case REQUEST_CODE_02:
//do something
break;
}
}
startActivityForResult(Intent intent, int requestCode)的参数,需要注意的是第二个,我们用的是REQUEST_CODE_01和REQUEST_CODE_02,其实这个是我们自己定义的一个int型常量,用于标记的,具体作用可在onActivityResult方法里看到,用于判断是哪个Activity传来的。
requestCode是请求标记, resultCode是返回标记。
ToB:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//结束之后会将结果传回From
这里的跳转回去,只能用setResult(int resultCode, Intent data)方法,否则会出错,无法从onActivityResult(int requestCode, int resultCode, Intent data)中的data接收到传回来的数据。
ToC:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//结束之后会将结果传回From
setResult的第一个参数对应上面onActivityResult的第二个参数。
实例的一个效果:
点击搜索按钮,找到DianXin。
源码:
例子②:
布局文件为两个按钮,不再给出。
RecieverActivity.java中也可以写成:
也可以在SenderActivity.java文件中一开始就传递参数,在按钮响应事件中写成:
RecieverActivity.java中写:
本文出自 “千寻” 博客,请务必保留此出处http://5200415.blog.51cto.com/3851969/969821
方法。
在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这个时候就要用到回调函数onActivityResult()。
需要注意三个方法:startActivityForResult(Intent intent, int requestCode),onActivityResult(int requestCode, int resultCode, Intent data),setResult(int resultCode, Intent data).
例如如下代码:从From跳转至ToB和ToC
From:
if(条件){
Intent intent = new Intent(this, ToB.class);
startActivityForResult(intent, REQUEST_CODE_01);//跳转至ToB
}else{
Intent intent = new Intent(this, ToC.class);
startActivityForResult(intent, REQUEST_CODE_02);//跳转至ToC
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode) {//请求标记
case REQUEST_CODE_01:
if(resultCode==Activity.RESULT_OK)
//do something
break;
case REQUEST_CODE_02:
//do something
break;
}
}
startActivityForResult(Intent intent, int requestCode)的参数,需要注意的是第二个,我们用的是REQUEST_CODE_01和REQUEST_CODE_02,其实这个是我们自己定义的一个int型常量,用于标记的,具体作用可在onActivityResult方法里看到,用于判断是哪个Activity传来的。
requestCode是请求标记, resultCode是返回标记。
ToB:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//结束之后会将结果传回From
这里的跳转回去,只能用setResult(int resultCode, Intent data)方法,否则会出错,无法从onActivityResult(int requestCode, int resultCode, Intent data)中的data接收到传回来的数据。
ToC:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//结束之后会将结果传回From
setResult的第一个参数对应上面onActivityResult的第二个参数。
实例的一个效果:
点击搜索按钮,找到DianXin。
源码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/mTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="我的联系人" /> <EditText android:id="@+id/mEditText01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="姓名" /> <EditText android:id="@+id/mEditText02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="电话号码" /> <Button android:id="@+id/mButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="搜索" /> </LinearLayout>
package com.xc.ex05_10; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class EX05_10 extends Activity { private TextView mTextView; private Button mButton; private EditText mEditText01; private EditText mEditText02; //回传标志 private static final int PICK_CONTACT_SUBACTIVITY = 2; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView = (TextView)findViewById(R.id.mTextView); mEditText01 = (EditText)findViewById(R.id.mEditText01); mEditText02 = (EditText)findViewById(R.id.mEditText02); mButton = (Button)findViewById(R.id.mButton); mButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.ContactsContract.Contacts.CONTENT_URI), PICK_CONTACT_SUBACTIVITY); } }); } //向新打开的Activity传递参数 //resultCode为回传的标记 //data为B(新打开的Activity)中回传的Intent @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub try{ switch (requestCode) { case PICK_CONTACT_SUBACTIVITY: final Uri uriRet = data.getData(); if(uriRet != null){ try{ //必须要有android.permission.READ_CONTACTS权限 Cursor c = managedQuery(uriRet, null, null, null, null); c.moveToFirst(); String strName = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); mEditText01.setText(strName); //取得联系人的电话 int contactId = c.getInt(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "+ contactId, null, null); StringBuffer sb = new StringBuffer(); int typePhone, resType; String numPhone; if(phones.getCount() > 0){ phones.moveToFirst(); typePhone = phones.getInt( phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); numPhone = phones.getString( phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); resType = ContactsContract.CommonDataKinds.Phone.getTypeLabelResource(typePhone); sb.append(getString(resType) + ":" + numPhone + "\n"); mEditText02.setText(numPhone); }else { sb.append("no Phone number found"); } Toast.makeText (this, sb.toString(), Toast.LENGTH_SHORT).show(); }catch (Exception e) { mTextView.setText(e.toString()); e.printStackTrace(); } } break; default: break; } }catch (Exception e) { e.printStackTrace(); } super.onActivityResult(requestCode, resultCode, data); } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xc.ex05_10" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.READ_CONTACTS"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".EX05_10" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
例子②:
布局文件为两个按钮,不再给出。
package com.example.intentproject; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class SenderActivity extends Activity{ private static final int MY_REQUEST_CODE = 1; private Button sender; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sender); sender = (Button)findViewById(R.id.sender); sender.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(SenderActivity.this, RecieverActivity.class); startActivityForResult(intent, MY_REQUEST_CODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode){ case MY_REQUEST_CODE: // 取出数据 String info=data.getStringExtra("data2"); Toast.makeText(this, info, Toast.LENGTH_LONG).show(); break; } switch (resultCode) { case Activity.RESULT_CANCELED: Toast.makeText(this, "处理:"+String.valueOf(Activity.RESULT_CANCELED), Toast.LENGTH_LONG).show(); break; case Activity.RESULT_OK: Toast.makeText(this, "处理:"+String.valueOf(Activity.RESULT_OK), Toast.LENGTH_LONG).show(); break; case Activity.RESULT_FIRST_USER: String info=data.getStringExtra("data2"); Toast.makeText(this, info, Toast.LENGTH_LONG).show(); break; default: break; } super.onActivityResult(requestCode, resultCode, data); } }
package com.example.intentproject; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.Button; public class RecieverActivity extends Activity{ private Button reciever; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.reciever); reciever = (Button)findViewById(R.id.reciever); Intent intent = new Intent(); intent.putExtra("data2", "给你回送数据!礼尚往来!"); this.setResult(Activity.RESULT_FIRST_USER, intent); } }
RecieverActivity.java中也可以写成:
Intent intent=this.getIntent(); //返回数据 intent.putExtra("data2", "给你回送数据!礼尚往来!"); this.setResult(Activity.RESULT_FIRST_USER, intent);
也可以在SenderActivity.java文件中一开始就传递参数,在按钮响应事件中写成:
sender.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(SenderActivity.this, ReciverActivity.class); intent.putExtra("data", "给你发送数据!"); // 这种启动方式 ,表示是有返回结果的 SenderActivity.this.startActivityForResult(intent, MY_REQUEST_CODE); } });
RecieverActivity.java中写:
Intent intent=this.getIntent(); String info=intent.getStringExtra("data"); Toast.makeText(this, info, Toast.LENGTH_LONG).show(); //返回数据 intent.putExtra("data2", "给你回送数据!礼尚往来!"); this.setResult(Activity.RESULT_FIRST_USER, intent);
本文出自 “千寻” 博客,请务必保留此出处http://5200415.blog.51cto.com/3851969/969821
相关文章推荐
- 网络嗅探教程:使用Sniffer Pro监控网络流量
- 使用Sniffer Pro监控网络流量
- 网络嗅探教程:使用Sniffer Pro监控网络流量
- 网络嗅探教程:使用Sniffer Pro监控网络流量 2
- 网络嗅探教程:使用Sniffer Pro监控网络流量 3
- 使用Sniffer Pro监控网络流量
- 使用Sniffer Pro监控网络流量
- 使用Sniffer Pro监控网络流量
- ubuntu下使用nethogs监控网络流量
- 通过改变网络拓扑使用Sniffer Pro监控、分析协议的示意图
- 通过改变网络拓扑使用Sniffer Pro监控、分析协议的示意图
- Linux下使用Shell对网络流量进行监控
- 通过改变网络拓扑使用Sniffer Pro监控、分析协议的示意图
- 使用MRTG监控网络流量
- [转]linux下iftop工具的安装与使用详解(图文)——实时的网络流量,监控TCP/IP连接(单机)
- 网络流量监控分析工具ntopng的安装与使用
- linux下使用vnstat监控网络流量
- ubuntu下使用nethogs监控网络流量
- 使用MRTG打造IDC网络流量监控平台
- iftop监控网络流量安装及使用