Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络
Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络
发布时间:2017-01-07 来源:查字典编辑
摘要:首先实现简单布局:复制代码代码如下:在Stirng中复制代码代码如下:http://luochuang.iteye.com/blog/160...

1

首先实现简单布局:

复制代码 代码如下:

<EditText

android:id="@+id/et_url"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_alignParentRight="true"

android:layout_alignParentTop="true"

android:ems="10"

android:text="@string/url_text" >

<requestFocus android:layout_width="match_parent" />

</EditText>

<Button

android:id="@+id/btn_ie"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_below="@+id/et_url"

android:onClick="sendHttp"

android:text="@string/btn_text" />

<ScrollView

android:id="@+id/sv_id"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_below="@+id/btn_ie" >

<TextView

android:id="@+id/tv_ie"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/ie_text" />

</ScrollView>

在Stirng中

复制代码 代码如下:

<string name="url_text">http://luochuang.iteye.com/blog/1606231</string>

<string name="btn_text">浏览</string>

<string name="ie_text">显示浏览网页内容</string>

新建类文件 :

2

首先MainActivity 中代码 :

复制代码 代码如下:

public class MainActivity extends Activity {

// 声明控件

public EditText et_url;

public TextView tv_ie;

// 网路操作类

public NetWorkUtils netWorkUtils;

private Handler handler;

public String content;

public static final int TEXT = 1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 获取et_url对象

et_url = (EditText) findViewById(R.id.et_url);

tv_ie = (TextView) findViewById(R.id.tv_ie);

// 实例化

netWorkUtils = new NetWorkUtils(this);

// 实例化这个处理者

handler = new Handler() {

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch (msg.what) {

case TEXT:

tv_ie.setText(content);// 设置显示的文本

break;

default:

break;

}

}

};

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

public void sendHttp(View v) {

// 设置网络

boolean flag = netWorkUtils.setActiveNetWork();

if (flag) {

// run方法 执行完毕 这个线程就消耗了

// 子线程

new Thread(new Runnable() {

@Override

public void run() {

send();

handler.sendEmptyMessage(TEXT);

}

}).start();

}

}

// 发送请求操作

@SuppressLint("NewApi")

public void send() {

// 获取url的path路径

String path = et_url.getText().toString();

if (path.isEmpty()) {

Toast.makeText(MainActivity.this, "访问 的url地址不能为空",

Toast.LENGTH_LONG).show();

} else {

content = HttpUtils.sendGet(path);

}

/*// 设置网络

netWorkUtils.setActiveNetWork();

// 获取url的path路径

String path = et_url.getText().toString();

if (path.isEmpty()) {

Toast.makeText(MainActivity.this, "访问 的url地址不能为空",

Toast.LENGTH_LONG).show();

} else {

try {

// 设置访问的url

URL url = new URL(path);

// 打开请求

HttpURLConnection httpURLConnection = (HttpURLConnection) url

.openConnection();

// 设置请求的信息

httpURLConnection.setRequestMethod("GET");

// 判断服务器是否响应成功

if (httpURLConnection.getResponseCode() == 200) {

// 获取响应的输入流对象

InputStream is = httpURLConnection.getInputStream();

// 字节输出流

ByteArrayOutputStream bops = new ByteArrayOutputStream();

// 读取数据的缓存区

byte buffer[] = new byte[1024];

// 读取长度记录

int len = 0;

// 循环读取

while ((len = is.read(buffer)) != -1) {

bops.write(buffer, 0, len);

}

// 把读取的内容转换成byte数组

byte data[] = bops.toByteArray();

// 把转换成字符串

content = new String(data);

} else {

Toast.makeText(MainActivity.this, "服务器响应错误",

Toast.LENGTH_LONG).show();

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}*/

}

}

复制代码 代码如下:

public class HttpUtils {

public static String sendGet(String path) {

String content = null;

try {

// 设置访问url

URL url = new URL(path);

// 打开请求

HttpURLConnection httpURLConnection = (HttpURLConnection) url

.openConnection();

// 设置请求的信息

httpURLConnection.setRequestMethod("GET");

// 设置请求是否超时时间

httpURLConnection.setConnectTimeout(5000);

// 判断服务器是否响应成功

if (httpURLConnection.getResponseCode() == 200) {

// 获取响应的输入流对象

InputStream is = httpURLConnection.getInputStream();

byte data[] = StreamTools.isToData(is);

// 把转换成字符串

content = new String(data);

// 内容编码方式

if (content.contains("gb2312")) {

content = new String(data, "gb2312");

}

}

// 断开连接

httpURLConnection.disconnect();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return content;

}

}

复制代码 代码如下:

public class StreamTools {

public static byte[] isToData(InputStream is) throws IOException{

//字节输出流

ByteArrayOutputStream bops = new ByteArrayOutputStream();

//读取数据的缓存区

byte buffer[] = new byte[1024];

//读取长度 的记录

int len = 0;

//循环读取

while((len = is.read(buffer)) != -1){

bops.write(buffer, 0, len);

}

//把读取的内容转换成 byte数组

byte data[] = bops.toByteArray();

return data;

}

}

复制代码 代码如下:

public class NetWorkUtils {

private Context context;

// 网路链接管理对象

public ConnectivityManager connectivityManager;

public NetWorkUtils(Context context) {

this.context = context;

// 获取网络链接的对象

connectivityManager = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

}

//public void setActiveNetWork() {

public boolean setActiveNetWork() {

boolean flag = false;

// 获取可用的网络链接对象

NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

if (networkInfo == null) {

new AlertDialog.Builder(context)

.setTitle("网络不可用")

.setMessage("可以设置网络?")

.setPositiveButton("确认",

new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

Toast.makeText(context, "点击确认",

Toast.LENGTH_LONG).show();

// 声明意图

Intent intent = new Intent();

intent.setAction(Intent.ACTION_MAIN);

intent.addCategory("android.intent.category.LAUNCHER");

intent.setComponent(new ComponentName(

"com.android.settings",

"com.android.settings.Settings"));

intent.setFlags(0x10200000);

// 执行意图

context.startActivity(intent);

}

})

.setNegativeButton("取消",

new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

}

// 必须.show();

}).show();

}

//判断网络是否可用

if(networkInfo!=null){

flag=true;

}

return flag;

}

}

然后就是要在AndroidManifest.xml中添加 可以访问网络的权限

复制代码 代码如下:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.INTERNET"/>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类