zoukankan      html  css  js  c++  java
  • 安卓开发笔记(十五):编写一款能够查看任意网站源代码的应用程序

    一.使用网络技术

     如果你在玩手机的时候不能够上网,那么你一定会感到十分乏味。是的,现在早就不是单机的时代了,因此我们需要跟进时代的步伐,在任何应用当中都应该具备上网的功能,我们在安卓软件当中查看网页代码再解析利用的是webview这个控件,这个控件在之前我的博客当中已经十分详细地介绍了它的使用,如果您阅读我的第五篇安卓开发博客,则可以十分容易地实现对webview控件发起http/https请求从而实现网页的浏览。但这里呢,我们需要直接通过原生的方式获得网页的代码,下面则是我们代码的解说以示例。首先我们应该写上我们主界面的当中的代码,即activity_main2.xml,这里我所运用了activity_main2.xml而没有使用activity_main.xml是因为我在自己的项目当中已经创建了两个活动,因此我们可以暂时忽略不计这个。

    activity_main2.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Main2Activity">

    <EditText
    android:id="@+id/web_url"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    android:hint="View which web's code"
    android:textSize="20dp" />

    <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="querySourceCode"
    android:layout_marginTop="10dp"
    android:text="click to view code"
    android:textSize="20dp" />

    <ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
    android:id="@+id/display_webContent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:hint="the blank is ready to show the code now" />
    </ScrollView>
    </LinearLayout>

     最后我们现实出来的界面如下:

     

     这里我们引用的控件是:

    ScrollView

     则是因为手机屏幕比较小,但是我们又想显示更多的内容,因此借助这个控件,我们还可以利用滚动的形式来查看屏幕之外的内容,因此这个控件的功能比我们的textview好多了。

     下面则展示我们的第二个主活动当中的代码:

    import android.Manifest;
    import android.app.Activity;
    import android.content.IntentFilter;
    import android.content.SharedPreferences;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.content.*;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.widget.Toast;

    public class MainActivity extends AppCompatActivity {
    private MyDatabaseHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 构建MyDatabaseHelper对象,指定数据库名为"BookStore.db、版本号为1,版本号改为2之后则会直接
    dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);
    Button btn_create_database = (Button) findViewById(R.id.creat);
    btn_create_database.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    // 创建或打开一个现有的数据库(已存在则打开,否则创建一个新的)
    dbHelper.getWritableDatabase();
    }
    });
    Button addData= (Button)findViewById(R.id.add);
    addData.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    SQLiteDatabase db=dbHelper.getWritableDatabase();
    ContentValues values=new ContentValues();
    values.put("name","the fuck code");
    values.put("autuor","fuckers");
    db.insert("Book",null,values);
    values.clear();
    values.put("name","the fuck code");
    values.put("autuor","fuckers");
    db.insert("Category",null,values);
    values.clear();

    }
    });
    Button updataData= (Button)findViewById(R.id.updata);
    updataData.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    SQLiteDatabase db=dbHelper.getWritableDatabase();
    ContentValues values=new ContentValues();
    values.put("name","我是傻逼 ");
    db.update("Book",values,"name=?",new String[]{"the fuck code"});//如果名字等于这个就可以进行更新了

    }
    });
    Button deleteData= (Button)findViewById(R.id.deletedata);
    deleteData.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    SQLiteDatabase db=dbHelper.getWritableDatabase();
    ContentValues values=new ContentValues();
    values.put("name","我是傻逼 ");
    db.delete("Book","name=?",new String[]{"the fuck code"});//如果名字等于这个就可以直接删除了

    }
    });
    Button tiaozhuan= (Button)findViewById(R.id.view);
    tiaozhuan.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    Intent wer=new Intent(MainActivity.this,Main2Activity.class);
    startActivity(wer);

    }
    });
    Button call= (Button)findViewById(R.id.call);
    call.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)!=
    PackageManager.PERMISSION_GRANTED)//这个括号也真是难打,真的难打
    {
    ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);
    }else
    {

    call2();

    }
    }
    });




    }
    private void call2()
    {
    try{
    Intent intent =new Intent(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel:13372716502"));
    startActivity(intent);

    }
    catch (SecurityException e)
    {
    e.printStackTrace();
    }

    }
    public void onRequestPermissionsResult(int requestCode,String[] permission,int[] grantResult)
    {
    switch (requestCode)
    {
    case 1:
    if(grantResult.length>0&&grantResult[0]==PackageManager.PERMISSION_GRANTED)
    {
    call2();
    }
    else {
    Toast.makeText(this,"你拒绝了这个权限",Toast.LENGTH_LONG).show();
    }
    break;
    default:
    }



    }


    }

    二.修改我们的网络通讯权限

     由于我们的应用程序是需要上网的,因此必须将我们AndroidManifest.xml文件当中的权限申明添加下这一项:

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

     最后运行软件,得到的效果如下图所示:

  • 相关阅读:
    Spring 框架学些(二)Spring AOP
    Spring框架学习(一)
    java spring框架的HelloWord
    Windows下查看进程执行参数
    js的code标签显示插件
    初接触hbase数据库
    gpg加密使用
    .net core全球化配置、使用
    CSS添加本地字体
    2011年NOIP普及组复赛题解
  • 原文地址:https://www.cnblogs.com/geeksongs/p/10589088.html
Copyright © 2011-2022 走看看