mjpg-streamer安卓APP

该APP主要作用是:(同一局域网内有下位机)根据输入的IP和端口号,利用Webview显示下位机的图像

有两个Activity,其中第一个是输入信息的页面,第二个是Webview的页面。

过程中遇到两个问题:

1、Webview加载网页时出现NET::ERR_CACHE_MISS的错误

1.在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
2.接着,在AndroidManifest.xml文件下的application标签增加以下属性:

<application
...
 android:networkSecurityConfig="@xml/network_security_config"
...
    />

2、Android WebView 出现err_cache_miss 

在工程的AndroidManifest.xml文件中加入联网的权限

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

IDE为Android studio,项目代码如下:

文件MainActivity.java

package com.example.onenet;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //点击事件
    public void connect(View v)
    {
        //Toast.makeText(MainActivity.this,"连接中",Toast.LENGTH_LONG).show();

        //得到输入框的IP地址
        EditText editText=findViewById(R.id.editText);
        String val=editText.getText().toString();

        //得到输入框的端口号
        EditText editText2=findViewById(R.id.editText2);
        String val2=editText2.getText().toString();

        //跳转到Activity2
        Intent intent=new Intent(MainActivity.this,Main2Activity.class);
        intent.putExtra("val",val);
        intent.putExtra("val2",val2);
        startActivityForResult(intent,0x01);

    }
}

文件Main2Activity.java

package com.example.onenet;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;



public class Main2Activity extends AppCompatActivity {


    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        //得到IP地址和端口号
        Intent intent=getIntent();
        String ip_num=intent.getStringExtra("val");
        String socket_num=intent.getStringExtra("val2");
        Toast.makeText(Main2Activity.this,ip_num+" port"+socket_num,Toast.LENGTH_LONG).show();


        Init(ip_num,socket_num);


    }

    public void Init(String ip_num,String port){

        mWebView = (WebView) findViewById(R.id.WebView);//获取view

        WebSettings WebSet = mWebView.getSettings();    //获取webview设置
        WebSet.setJavaScriptEnabled(true);              //设置JavaScript支持

        WebSet.setSupportZoom(true);            // 设置可以支持缩放

        WebSet.setBuiltInZoomControls(true);    // 设置出现缩放工具

        WebSet.setUseWideViewPort(true);        //扩大比例的缩放

        WebSet.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);   //自适应屏幕
        WebSet.setLoadWithOverviewMode(true);

        //mWebView.loadUrl("http://iamhouhuan.vicp.io:40710/h_listening/login/login.jsp");
        //mWebView.loadUrl("http://"+ip_num+":"+port+"/javascript_simple.html");
        mWebView.loadUrl("http://"+ip_num+":"+port+"/?action=stream");
        //mWebView.loadUrl("http://www.baidu.com/");
        //设置webview打开的链接

        mWebView.setWebViewClient(new WebViewClient(){  //设置不适用第三方浏览器打开网页
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
                view.loadUrl(url);
                return true;
            }
        });

    }
    @Override
    public void onBackPressed() {

        if(mWebView.canGoBack()) {
            mWebView.goBack();//返回上一页面
        }
        else {
            System.exit(0);//退出程序
        }
    }
}

文件ativity_main.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:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/ip_address"
            android:textColor="@color/text_color"
            android:textSize="@dimen/text_size" />

        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="192.168.43.235" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/socket_num"
            android:textColor="@color/text_color"
            android:textSize="@dimen/text_size" />

        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="8080" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/button_size"
            android:textColor="@color/button_color"
            android:onClick="connect"
            android:text="@string/connect" />
    </LinearLayout>


</LinearLayout>

文件ativity_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"
    android:gravity="center"
    tools:context=".Main2Activity">


    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/WebView"
        />
    
</LinearLayout>

文件AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.onenet">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:networkSecurityConfig="@xml/network_security_config"
        android:theme="@style/AppTheme">
        <activity android:name=".Main2Activity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


    </application>

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

文件network_security_config.xml  (位置:res/xml/)

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

文件strings.xml  (位置:res/values/)

<resources>
    <string name="app_name">Onenet</string>
    <string name="ip_address">IP地址</string>
    <string name="socket_num">端口号</string>
    <string name="connect">连接</string>
</resources>

文件colors.xml  (位置:res/values/)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
    <color name="text_color">#0000ff</color>
    <color name="button_color">#D81B60</color>
</resources>

文件dimen.xml  (位置:res/values/)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="text_size">18dp</dimen>
    <dimen name="button_size">20dp</dimen>
</resources>
发布了32 篇原创文章 · 获赞 18 · 访问量 6543

猜你喜欢

转载自blog.csdn.net/mm13420109325/article/details/88325148