DP:about string

本文介绍了一种使用递归算法来解决回文字符串分割的问题,给出了一段C++代码实现,该算法能够找出所有可能的回文子串分割方式。

Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s =”aab”,
Return
[
[“aa”,”b”],
[“a”,”a”,”b”]
]

用递归的思想求解,DP表示不会。。。。。。
相关问题:

void dfs(string s, vector<string> &path, vector<vector<string>> &result)
{
    if(s.size() < 1)
    {
        result.push_back(path);
        return ;
    }

    for(int i = 0; i < s.size(); ++i)
    {
        int start = 0;
        int end = i;

        while(start < end)
        {
            if(s[start] == s[end])
            {
                ++start;
                --end;
            }
            else break;
        }

        if(start >= end)
        {
            path.push_back(s.substr(0, i+1));
            dfs(s.substr(i+1), path, result);
            path.pop_back();
        }
    }
}

vector<vector<string>> partition(string s) 
{
    vector<vector<string>> result;
    vector<string> path;
    dfs(s, path, result);

    return result;
}
给下列程序添加注释:void DWAPlannerROS::initialize( std::string name, tf2_ros::Buffer* tf, costmap_2d::Costmap2DROS* costmap_ros) { if (! isInitialized()) { ros::NodeHandle private_nh("~/" + name); g_plan_pub_ = private_nh.advertise<nav_msgs::Path>("global_plan", 1); l_plan_pub_ = private_nh.advertise<nav_msgs::Path>("local_plan", 1); tf_ = tf; costmap_ros_ = costmap_ros; costmap_ros_->getRobotPose(current_pose_); // make sure to update the costmap we'll use for this cycle costmap_2d::Costmap2D* costmap = costmap_ros_->getCostmap(); planner_util_.initialize(tf, costmap, costmap_ros_->getGlobalFrameID()); //create the actual planner that we'll use.. it'll configure itself from the parameter server dp_ = boost::shared_ptr<DWAPlanner>(new DWAPlanner(name, &planner_util_)); if( private_nh.getParam( "odom_topic", odom_topic_ )) { odom_helper_.setOdomTopic( odom_topic_ ); } initialized_ = true; // Warn about deprecated parameters -- remove this block in N-turtle nav_core::warnRenamedParameter(private_nh, "max_vel_trans", "max_trans_vel"); nav_core::warnRenamedParameter(private_nh, "min_vel_trans", "min_trans_vel"); nav_core::warnRenamedParameter(private_nh, "max_vel_theta", "max_rot_vel"); nav_core::warnRenamedParameter(private_nh, "min_vel_theta", "min_rot_vel"); nav_core::warnRenamedParameter(private_nh, "acc_lim_trans", "acc_limit_trans"); nav_core::warnRenamedParameter(private_nh, "theta_stopped_vel", "rot_stopped_vel"); dsrv_ = new dynamic_reconfigure::Server<DWAPlannerConfig>(private_nh); dynamic_reconfigure::Server<DWAPlannerConfig>::CallbackType cb = boost::bind(&DWAPlannerROS::reconfigureCB, this, _1, 2); dsrv->setCallback(cb); } else{ ROS_WARN("This planner has already been initialized, doing nothing."); } }
06-12
package com.example.layoutdome; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.media.MediaPlayer; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.WebChromeClient; import android.webkit.WebResourceError; import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import android.widget.MediaController; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.TrackSelector; import java.io.File; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity3 extends AppCompatActivity implements StyleRequest.OnStyleRequestListener { private WebView webView, topWebView; private TextView tvMarqueeBlue,tvMarqueeGreen,tvMarqueePurple; private FullScreenVideoView videoView; private String url; private String topUrl; private String lastValue = "";//避免不必要的页面加载 private ImageView ivImage; private RelativeLayout rlBlue, rlGreen, rlPurple; private Handler handler = new Handler(Looper.getMainLooper()); private Runnable refreshRunnable = new Runnable() { @Override public void run() { // 执行请求 new StyleRequest(MainActivity3.this).execute(); // 每 5 分钟重复执行 handler.postDelayed(this, 10000); } }; public static int getDeviceWidthInDp(Context context) { DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); int widthPixels = displayMetrics.widthPixels; float density = displayMetrics.density; return (int) (widthPixels / density); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); webView = findViewById(R.id.web); topWebView = findViewById(R.id.webView); ivImage = findViewById(R.id.iv_image_blue); tvMarqueeBlue = findViewById(R.id.tv_marquee_blue); tvMarqueeGreen = findViewById(R.id.tv_marquee_green); tvMarqueePurple = findViewById(R.id.tv_marquee_purple); videoView = (FullScreenVideoView) findViewById(R.id.video); // 初始化三个 RelativeLayout rlBlue = findViewById(R.id.rl_blue); rlGreen = findViewById(R.id.rl_green); rlPurple = findViewById(R.id.rl_purple); // 默认隐藏所有布局 rlBlue.setVisibility(View.GONE); rlGreen.setVisibility(View.GONE); rlPurple.setVisibility(View.GONE); // 从 Intent 获取预加载的 URL Intent intent = getIntent(); String topUrl = intent.getStringExtra("topUrl"); String mainUrl = intent.getStringExtra("mainUrl"); if (topUrl !=null && mainUrl != null) { SetUpTopTheWebPageWithUrl(topUrl); SetUpTheWebPageWithUrl(mainUrl); }else { // 如果没有预加载数据,则走原来的逻辑 // 1. 立即执行一次请求 new StyleRequest(this).execute(); // 启动定时任务:每 5 分钟执行一次 handler.postDelayed(refreshRunnable, 10000); // 5 分钟 } SetUpTheVideo(); int widthDp = getDeviceWidthInDp(this); Log.d("ScreenInfo", "Device width in dp: " + widthDp); initTopWebViewClient(); // 只设置一次 } private void initTopWebViewClient() { topWebView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d("WebView", "开始加载: " + url); } @Override public void onPageFinished(WebView view, String url) { Log.d("WebView", "页面加载完成: " + url); view.evaluateJavascript("document.querySelectorAll('img').forEach(img => img.loading = 'lazy');", null); } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { Log.e("WebView", "加载错误: " + error.toString()); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.d("WebView", "尝试加载: " + url); view.loadUrl(url); return true; } }); } @Override public void onStyleRequest(StyleList styleList) { String value = styleList.getData().getValue(); if (value != null && !value.equals(lastValue)) { lastValue = value; // 更新 lastValue SetUpTheWebPage(value); SetUpTopTheWebPage(value); // 切换布局显示 showBulletinByValue(value); Log.d("MainActivity3", "valuewqeqweqweqweq" + value); } else { Log.d("MainActivity3", "value 未发生变化,跳过加载"); } } // 根据 value 切换显示哪个布局 @SuppressLint("ResourceAsColor") public void showBulletinByValue(String value) { // 先隐藏所有 rlBlue.setVisibility(View.GONE); rlGreen.setVisibility(View.GONE); rlPurple.setVisibility(View.GONE); // 根据 value 显示对应的布局 switch (value) { case "1": rlGreen.setVisibility(View.VISIBLE); SetUpMarquees(tvMarqueeGreen); tvMarqueeGreen.setTextColor(getColor(R.color.green)); break; case "2": SetUpMarquees(tvMarqueePurple); tvMarqueePurple.setTextColor(getColor(R.color.purple)); rlPurple.setVisibility(View.VISIBLE); break; default: SetUpMarquees(tvMarqueeBlue); tvMarqueeBlue.setTextColor(getColor(R.color.white)); rlBlue.setVisibility(View.VISIBLE); // 默认显示蓝色 break; } } @SuppressLint("SetJavaScriptEnabled") private void SetUpTopTheWebPage(String value) { if (topWebView == null) { Log.e("SetUpTopTheWebPage", "topWebView 未初始化"); return; } WebSettings webSettings = topWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); webSettings.setJavaScriptCanOpenWindowsAutomatically(false); webSettings.setSupportMultipleWindows(false); webSettings.setBuiltInZoomControls(false); webSettings.setDisplayZoomControls(false); switch (value) { case "0": // 加载网页 topUrl = "http://192.168.2.36:8088/#/header?deviceNo=ES02&type=0"; break; case "1": topUrl = "http://192.168.2.36:8088/#/header?deviceNo=ES02&type=1"; break; case "2": topUrl = "http://192.168.2.36:8088/#/header?deviceNo=ES02&type=2"; break; } // 清除缓存 topWebView.clearCache(true); topWebView.clearHistory(); Log.i("wangye", "dizhi" + topUrl); // 添加时间戳防止缓存 String finalUrl = topUrl + "&t=" + System.currentTimeMillis(); // 预加载顶部 WebView topWebView.loadUrl("about:blank"); // 先加载空白页 // 然后再加载真实 URL new Handler(Looper.getMainLooper()).postDelayed(() -> { topWebView.loadUrl(finalUrl); }, 50); } private void SetUpMarquees(TextView textView) { textView.setText("S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整"); textView.setSelected(true); // 必须设置为 selected 才能启动 marquee textView.setFocusable(true); textView.setFocusableInTouchMode(true); textView.requestFocus(); // 强制获取焦点 } private void SetUpTheVideo() { // 视频文件的路径 String videoPath = "/storage/emulated/0/Download/DEFAULT.mp4"; // 创建 File 对象 File videoFile = new File(videoPath); // 检查文件是否存在 if (videoFile.exists()) { // 文件存在 Toast.makeText(this, "文件存在", Toast.LENGTH_SHORT).show(); } else { // 文件不存在 Toast.makeText(this, "文件不存在", Toast.LENGTH_SHORT).show(); } // 设置视频路径 videoView.setVideoPath(videoPath); // 添加控制器 MediaController mediaController = new MediaController(this); mediaController.setAnchorView(videoView); videoView.setMediaController(mediaController); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // 播放视频 videoView.start(); } }); // 检查文件格式和编码是否受支持 videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { if (what == MediaPlayer.MEDIA_ERROR_UNSUPPORTED) { } // 处理不支持的文件格式或编码 Log.e("VideoPlayer", "播放视频时发生错误. what: " + what + ", extra: " + extra); return false; } }); } @SuppressLint("SetJavaScriptEnabled") private void SetUpTheWebPage(String value) { WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); webSettings.setJavaScriptCanOpenWindowsAutomatically(false); webSettings.setSupportMultipleWindows(false); webSettings.setBuiltInZoomControls(false); webSettings.setDisplayZoomControls(false); // 注入接口对象 webView.addJavascriptInterface(new JavascriptBroadcastInterfaces(), "broadcast"); Log.d("MainActivity3", "value 发生变化,加载"); Log.i("MainActivity3", "下边距web:" + value); switch (value) { case "0": // 加载网页 url = "http://192.168.2.36:8088/#/electrStation?deviceNo=ES02"; break; case "1": url = "http://192.168.2.36:8088/#/electrStation/greenTemp?deviceNo=ES02"; break; case "2": url = "http://192.168.2.36:8088/#/electrStation/purpleTemp?deviceNo=ES02"; break; } // 设置 WebViewClient 以在应用内打开页面 webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webView.evaluateJavascript("document.querySelectorAll('img').forEach(img => img.loading = 'lazy');", null); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); webView.loadUrl(url); } public class JavascriptBroadcastInterfaces { private String lastBroadcast; // 保存上一次收到的 broadcast @JavascriptInterface public void getBroadcast(String broadcast) { Log.i("Broadcast", "Received broadcast: " + broadcast); // 如果新值和上次相同,直接返回 if (broadcast != null && broadcast.equals(lastBroadcast)) { Log.i("Broadcast", "重复的 broadcast,跳过播放"); return; } // 更新 lastBroadcast 为新的值 lastBroadcast = broadcast; // 构造音频 URL String audioUrl = "http://192.168.3.150:816/mp3?s=" + broadcast; if (isUrlReachable(audioUrl, MainActivity3.this)) { // 开始播放音频 Log.e("Broadcast", "音频 URL :" + audioUrl); playAudioWithExoPlayer(audioUrl); } else { Log.e("Broadcast", "音频 URL 不可用"); } } SimpleExoPlayer player; private void playAudioWithExoPlayer(String audioUrl) { if (player != null) { player.release(); player = null; } TrackSelector trackSelector = new DefaultTrackSelector(); player = new SimpleExoPlayer.Builder(MainActivity3.this).setTrackSelector(trackSelector).build(); MediaItem mediaItem = MediaItem.fromUri(audioUrl); player.setMediaItem(mediaItem); player.prepare(); player.play(); } } @Override public void onBackPressed() { // 如果 WebView 可以返回,则返回上一页 if (webView.canGoBack()) { webView.goBack(); } else { super.onBackPressed(); } } private boolean isUrlReachable(String audioUrl, Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo == null || !netInfo.isConnected()) { Log.e("Network", "No network connection"); return false; } try { URL url = new URL(audioUrl); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); urlConn.setConnectTimeout(3000); urlConn.setRequestMethod("HEAD"); int responseCode = urlConn.getResponseCode(); String contentType = urlConn.getContentType(); Log.d("URLCheck", "Response Code: " + responseCode); Log.d("URLCheck", "Content-Type: " + contentType); urlConn.disconnect(); return responseCode == HttpURLConnection.HTTP_OK; } catch (IOException e) { Log.e("URLCheck", "URL 不可达", e); return false; } } @Override protected void onDestroy() { super.onDestroy(); // 停止定时任务 handler.removeCallbacks(refreshRunnable); } @SuppressLint("SetJavaScriptEnabled") private void SetUpTopTheWebPageWithUrl(String topUrl) { WebSettings webSettings = topWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); topWebView.clearCache(true); topWebView.clearHistory(); String finalUrl = topUrl + "&t=" + System.currentTimeMillis(); topWebView.loadUrl("about:blank"); new Handler(Looper.getMainLooper()).postDelayed(() -> topWebView.loadUrl(finalUrl), 50); } @SuppressLint("SetJavaScriptEnabled") private void SetUpTheWebPageWithUrl(String mainUrl) { WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); webView.addJavascriptInterface(new JavascriptBroadcastInterfaces(), "broadcast"); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webView.evaluateJavascript("document.querySelectorAll('img').forEach(img => img.loading = 'lazy');", null); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); String finalUrl = mainUrl + "&t=" + System.currentTimeMillis(); webView.loadUrl("about:blank"); new Handler(Looper.getMainLooper()).postDelayed(() -> webView.loadUrl(finalUrl), 50); } }这段代码不加package com.example.layoutdome; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.media.MediaPlayer; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.WebChromeClient; import android.webkit.WebResourceError; import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import android.widget.MediaController; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.TrackSelector; import java.io.File; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity3 extends AppCompatActivity implements StyleRequest.OnStyleRequestListener { private WebView webView, topWebView; private TextView tvMarqueeBlue,tvMarqueeGreen,tvMarqueePurple; private FullScreenVideoView videoView; private String url; private String topUrl; private String lastValue = "";//避免不必要的页面加载 private ImageView ivImage; private RelativeLayout rlBlue, rlGreen, rlPurple; private Handler handler = new Handler(Looper.getMainLooper()); private Runnable refreshRunnable = new Runnable() { @Override public void run() { // 执行请求 new StyleRequest(MainActivity3.this).execute(); // 每 5 分钟重复执行 handler.postDelayed(this, 10000); } }; public static int getDeviceWidthInDp(Context context) { DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); int widthPixels = displayMetrics.widthPixels; float density = displayMetrics.density; return (int) (widthPixels / density); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); webView = findViewById(R.id.web); topWebView = findViewById(R.id.webView); ivImage = findViewById(R.id.iv_image_blue); tvMarqueeBlue = findViewById(R.id.tv_marquee_blue); tvMarqueeGreen = findViewById(R.id.tv_marquee_green); tvMarqueePurple = findViewById(R.id.tv_marquee_purple); videoView = (FullScreenVideoView) findViewById(R.id.video); // 初始化三个 RelativeLayout rlBlue = findViewById(R.id.rl_blue); rlGreen = findViewById(R.id.rl_green); rlPurple = findViewById(R.id.rl_purple); // 默认隐藏所有布局 rlBlue.setVisibility(View.GONE); rlGreen.setVisibility(View.GONE); rlPurple.setVisibility(View.GONE); // 从 Intent 获取预加载的 URL Intent intent = getIntent(); String topUrl = intent.getStringExtra("topUrl"); String mainUrl = intent.getStringExtra("mainUrl"); if (topUrl !=null && mainUrl != null) { SetUpTopTheWebPageWithUrl(topUrl); SetUpTheWebPageWithUrl(mainUrl); }else { // 如果没有预加载数据,则走原来的逻辑 // 1. 立即执行一次请求 new StyleRequest(this).execute(); // 启动定时任务:每 5 分钟执行一次 handler.postDelayed(refreshRunnable, 10000); // 5 分钟 } SetUpTheVideo(); int widthDp = getDeviceWidthInDp(this); Log.d("ScreenInfo", "Device width in dp: " + widthDp); initTopWebViewClient(); // 只设置一次 } private void initTopWebViewClient() { topWebView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d("WebView", "开始加载: " + url); } @Override public void onPageFinished(WebView view, String url) { Log.d("WebView", "页面加载完成: " + url); view.evaluateJavascript("document.querySelectorAll('img').forEach(img => img.loading = 'lazy');", null); } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { Log.e("WebView", "加载错误: " + error.toString()); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.d("WebView", "尝试加载: " + url); view.loadUrl(url); return true; } }); } @Override public void onStyleRequest(StyleList styleList) { String value = styleList.getData().getValue(); if (value != null && !value.equals(lastValue)) { lastValue = value; // 更新 lastValue SetUpTheWebPage(value); SetUpTopTheWebPage(value); // 切换布局显示 showBulletinByValue(value); Log.d("MainActivity3", "valuewqeqweqweqweq" + value); } else { Log.d("MainActivity3", "value 未发生变化,跳过加载"); } } // 根据 value 切换显示哪个布局 @SuppressLint("ResourceAsColor") public void showBulletinByValue(String value) { // 先隐藏所有 rlBlue.setVisibility(View.GONE); rlGreen.setVisibility(View.GONE); rlPurple.setVisibility(View.GONE); // 根据 value 显示对应的布局 switch (value) { case "1": rlGreen.setVisibility(View.VISIBLE); SetUpMarquees(tvMarqueeGreen); tvMarqueeGreen.setTextColor(getColor(R.color.green)); break; case "2": SetUpMarquees(tvMarqueePurple); tvMarqueePurple.setTextColor(getColor(R.color.purple)); rlPurple.setVisibility(View.VISIBLE); break; default: SetUpMarquees(tvMarqueeBlue); tvMarqueeBlue.setTextColor(getColor(R.color.white)); rlBlue.setVisibility(View.VISIBLE); // 默认显示蓝色 break; } } @SuppressLint("SetJavaScriptEnabled") private void SetUpTopTheWebPage(String value) { if (topWebView == null) { Log.e("SetUpTopTheWebPage", "topWebView 未初始化"); return; } WebSettings webSettings = topWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); webSettings.setJavaScriptCanOpenWindowsAutomatically(false); webSettings.setSupportMultipleWindows(false); webSettings.setBuiltInZoomControls(false); webSettings.setDisplayZoomControls(false); switch (value) { case "0": // 加载网页 topUrl = "http://192.168.2.36:8088/#/header?deviceNo=ES02&type=0"; break; case "1": topUrl = "http://192.168.2.36:8088/#/header?deviceNo=ES02&type=1"; break; case "2": topUrl = "http://192.168.2.36:8088/#/header?deviceNo=ES02&type=2"; break; } // 清除缓存 topWebView.clearCache(true); topWebView.clearHistory(); Log.i("wangye", "dizhi" + topUrl); // 添加时间戳防止缓存 String finalUrl = topUrl + "&t=" + System.currentTimeMillis(); // 预加载顶部 WebView topWebView.loadUrl("about:blank"); // 先加载空白页 // 然后再加载真实 URL new Handler(Looper.getMainLooper()).postDelayed(() -> { topWebView.loadUrl(finalUrl); }, 50); } private void SetUpMarquees(TextView textView) { textView.setText("S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整理代码需要访问的数据地址S3.整"); textView.setSelected(true); // 必须设置为 selected 才能启动 marquee textView.setFocusable(true); textView.setFocusableInTouchMode(true); textView.requestFocus(); // 强制获取焦点 } private void SetUpTheVideo() { // 视频文件的路径 String videoPath = "/storage/emulated/0/Download/DEFAULT.mp4"; // 创建 File 对象 File videoFile = new File(videoPath); // 检查文件是否存在 if (videoFile.exists()) { // 文件存在 Toast.makeText(this, "文件存在", Toast.LENGTH_SHORT).show(); } else { // 文件不存在 Toast.makeText(this, "文件不存在", Toast.LENGTH_SHORT).show(); } // 设置视频路径 videoView.setVideoPath(videoPath); // 添加控制器 MediaController mediaController = new MediaController(this); mediaController.setAnchorView(videoView); videoView.setMediaController(mediaController); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // 播放视频 videoView.start(); } }); // 检查文件格式和编码是否受支持 videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { if (what == MediaPlayer.MEDIA_ERROR_UNSUPPORTED) { } // 处理不支持的文件格式或编码 Log.e("VideoPlayer", "播放视频时发生错误. what: " + what + ", extra: " + extra); return false; } }); } @SuppressLint("SetJavaScriptEnabled") private void SetUpTheWebPage(String value) { WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); webSettings.setJavaScriptCanOpenWindowsAutomatically(false); webSettings.setSupportMultipleWindows(false); webSettings.setBuiltInZoomControls(false); webSettings.setDisplayZoomControls(false); // 注入接口对象 webView.addJavascriptInterface(new JavascriptBroadcastInterfaces(), "broadcast"); Log.d("MainActivity3", "value 发生变化,加载"); Log.i("MainActivity3", "下边距web:" + value); switch (value) { case "0": // 加载网页 url = "http://192.168.2.36:8088/#/electrStation?deviceNo=ES02"; break; case "1": url = "http://192.168.2.36:8088/#/electrStation/greenTemp?deviceNo=ES02"; break; case "2": url = "http://192.168.2.36:8088/#/electrStation/purpleTemp?deviceNo=ES02"; break; } // 设置 WebViewClient 以在应用内打开页面 webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webView.evaluateJavascript("document.querySelectorAll('img').forEach(img => img.loading = 'lazy');", null); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); webView.loadUrl(url); } public class JavascriptBroadcastInterfaces { private String lastBroadcast; // 保存上一次收到的 broadcast @JavascriptInterface public void getBroadcast(String broadcast) { Log.i("Broadcast", "Received broadcast: " + broadcast); // 如果新值和上次相同,直接返回 if (broadcast != null && broadcast.equals(lastBroadcast)) { Log.i("Broadcast", "重复的 broadcast,跳过播放"); return; } // 更新 lastBroadcast 为新的值 lastBroadcast = broadcast; // 构造音频 URL String audioUrl = "http://192.168.3.150:816/mp3?s=" + broadcast; if (isUrlReachable(audioUrl, MainActivity3.this)) { // 开始播放音频 Log.e("Broadcast", "音频 URL :" + audioUrl); playAudioWithExoPlayer(audioUrl); } else { Log.e("Broadcast", "音频 URL 不可用"); } } SimpleExoPlayer player; private void playAudioWithExoPlayer(String audioUrl) { if (player != null) { player.release(); player = null; } TrackSelector trackSelector = new DefaultTrackSelector(); player = new SimpleExoPlayer.Builder(MainActivity3.this).setTrackSelector(trackSelector).build(); MediaItem mediaItem = MediaItem.fromUri(audioUrl); player.setMediaItem(mediaItem); player.prepare(); player.play(); } } @Override public void onBackPressed() { // 如果 WebView 可以返回,则返回上一页 if (webView.canGoBack()) { webView.goBack(); } else { super.onBackPressed(); } } private boolean isUrlReachable(String audioUrl, Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo == null || !netInfo.isConnected()) { Log.e("Network", "No network connection"); return false; } try { URL url = new URL(audioUrl); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); urlConn.setConnectTimeout(3000); urlConn.setRequestMethod("HEAD"); int responseCode = urlConn.getResponseCode(); String contentType = urlConn.getContentType(); Log.d("URLCheck", "Response Code: " + responseCode); Log.d("URLCheck", "Content-Type: " + contentType); urlConn.disconnect(); return responseCode == HttpURLConnection.HTTP_OK; } catch (IOException e) { Log.e("URLCheck", "URL 不可达", e); return false; } } @Override protected void onDestroy() { super.onDestroy(); // 停止定时任务 handler.removeCallbacks(refreshRunnable); } @SuppressLint("SetJavaScriptEnabled") private void SetUpTopTheWebPageWithUrl(String topUrl) { WebSettings webSettings = topWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); topWebView.clearCache(true); topWebView.clearHistory(); String finalUrl = topUrl + "&t=" + System.currentTimeMillis(); topWebView.loadUrl("about:blank"); new Handler(Looper.getMainLooper()).postDelayed(() -> topWebView.loadUrl(finalUrl), 50); } @SuppressLint("SetJavaScriptEnabled") private void SetUpTheWebPageWithUrl(String mainUrl) { WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); webView.addJavascriptInterface(new JavascriptBroadcastInterfaces(), "broadcast"); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webView.evaluateJavascript("document.querySelectorAll('img').forEach(img => img.loading = 'lazy');", null); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); String finalUrl = mainUrl + "&t=" + System.currentTimeMillis(); webView.loadUrl("about:blank"); new Handler(Looper.getMainLooper()).postDelayed(() -> webView.loadUrl(finalUrl), 50); } }这个判断没有预加载效果,加了又会导致实时切换页面webView网页没效果
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值