这次较上次的总结中新增了可以copy IP的功能,对文本框中现有的数据进行捕获并且进行处理(将查询信息中的格式解析成回行,让信息一条一条显示出来),只截取信息中的ip然后将其复制到系统剪切板,并且可以调用浏览器进行直接访问。
对查询信息中的文字处理
原本的信息中格式中有大量无用空格,这里将空格替换为回车
在上篇主函数showDnsIp()中对return的ip进行处理,把一个以上的空格全部替换为“\n”回车
//将查询结果中的空格替换为回行
ip = rec.toString().replaceAll("\\s+","\n");
格式如下图
ns-msg-type.png
当点击copy按钮时,会弹出dialog
copy ip的对话框
copy_ip_dialog.png捕获字符串中的=ip并且将ip回传,因为用的java包中的函数查询出的格式为域名+端口号+in+查询类型+ip地址所以用数组可以把ip取出来。
用‘\n’把字符串切割成字符串数组可以把ip取出来,对应的其他错误格式则用字幕显示no ip fond。
/**
* 处理查询结果
* 获取字符串中ip
*/
public String copyIp(String address){
String [] ip;
String errorIp="Error:";
String nullIP="Please enter domain name";
//利用数组取出查询结果中的ip,回传ip,没有ip则回传空字符
if (address.contains(errorIp)||address.equals("")||address.equals(nullIP)){
ip= new String[]{"","","","",""};
}else {
ip=address.split("\n");
}
//格式:ip[0]域名,ip[1]端口号,ip[3]查询类型,ip[4]ip地址
return ip[4];
}
dialog的显示
设置好dialog的标题和内容,点击ok可以去粘贴,点击Open this url则调用默认的浏览器将ip打开。
其中访问浏览器需要用到intent,这里可以拓展为用户选定浏览器。记住dialog需要跟Toast一样最后要用.crate()和.show()将dialog显示
/**
*显示ip复制的dialog
*/
public void showIpDialog(String mIp){
AlertDialog.Builder mDialog=new AlertDialog.Builder(mAllActivity);
mDialog.setMessage("You've copied this IP:\n"+"\t"+mIp);
mDialog.setTitle(R.string.nslookup_dialog_title);
//点击ok关闭对话框
mDialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
//点击左边按钮访问ip
mDialog.setNegativeButton("Open this url", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//访问复制到的ip
Intent localIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://" + mIp));
mAllActivity.startActivity(localIntent);
dialog.cancel();
}
});
mDialog.create();
mDialog.show();
}
点击按钮时copy Ip,并且弹出dialog
首先判断接到的信息是什么,若是字符串则显示字幕no ip fond,不是则将ip复制到剪切板并且创建dialog。
获取系统剪切板则需要使用到ClipboardManager剪切板管理器,用的时候创建对象并且赋值
mCopyButton.setOnClickListener(new View.OnClickListener() {
/**
* 点击按钮复制ip
* @param v
*/
@Override
public void onClick(View v) {
//复制ip并且显示复制ip的dialog
String ip=copyIp(mTextView.getText().toString());
if (ip.equals("")){
Toast.makeText(mServerMonitor,R.string.nslookup_toast_msg,Toast.LENGTH_SHORT).show();
}else {
//获取到剪贴板管理器
ClipboardManager mClipboardManager=(ClipboardManager)mAllActivity.
getSystemService(Context.CLIPBOARD_SERVICE);
//创建普通字符型ClipData
ClipData mClipData=ClipData.newPlainText("Lable",ip);
//放到系统剪切板
mClipboardManager.setPrimaryClip(mClipData);
showIpDialog(ip);
}
Log.d("---复制信息---"+ip);
}
});
这次算是对上次的域名查询功能上面做了一些补充,学习了一下Android中的使用浏览器访问ip和系统剪切板的使用。马上就要开学了,这个学年要学习更多东西,丰富自己努力提升。
网友评论