Skip to content

Commit 49ec312

Browse files
author
ctj
committed
优化网络ping
1 parent 60ed822 commit 49ec312

File tree

14 files changed

+773
-44
lines changed

14 files changed

+773
-44
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,17 @@
66
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
77
xmlns:tools="http://schemas.android.com/tools"
88
package="com.wave_chtj.example"><!--android:sharedUserId="android.uid.system"-->
9+
<!-- 调用摄像头 -->
10+
<uses-permission android:name="android.permission.CAMERA" />
11+
<!-- 录制视频/音频 -->
12+
<uses-permission android:name="android.permission.RECORD_AUDIO" />
13+
<!-- sd卡读写 -->
14+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
15+
<!-- 挂载sd卡 -->
16+
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
17+
<!-- 唤醒屏幕 -->
918
<uses-permission android:name="android.permission.WAKE_LOCK" />
19+
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
1020
<uses-permission
1121
android:name="android.permission.DEVICE_POWER"
1222
tools:ignore="ProtectedPermissions" />
@@ -74,10 +84,11 @@
7484
<uses-permission
7585
android:name="android.permission.WRITE_SETTINGS"
7686
tools:ignore="ProtectedPermissions" />
77-
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
87+
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
7888
<!--自定义保活广播-->
7989
<protected-broadcast android:name="com.chtj.add.keepalive.info" />
8090
<protected-broadcast android:name="com.chtj.add.keepalive.info.result" />
91+
8192
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
8293

8394
<!-- 蓝牙相关 -->
@@ -187,29 +198,45 @@
187198
android:name=".network.NetMonitorAty"
188199
android:theme="@style/Theme.AppCompat.NoActionBar" />
189200

190-
<activity android:name=".test.TestAty"
201+
<activity
202+
android:name=".test.TestAty"
191203
android:theme="@style/AppTheme" />
192204
<!--蓝牙测试-->
193-
<activity android:name=".bluetooth.BlueToothAty"
205+
<activity
206+
android:name=".bluetooth.BlueToothAty"
194207
android:theme="@style/AppTheme" />
208+
<!--视频录制-->
209+
<activity
210+
android:name=".video.PlayCacheVideoAty"
211+
android:theme="@style/AppTheme" />
212+
<!--nginx验证-->
213+
<activity android:name=".nginx.NginxAty"
214+
android:theme="@style/AppTheme"/>
195215
<!--在服务里面进行一些application应该执行的初始化操作-->
196216
<service
197217
android:name=".application.InitializeService"
198218
android:enabled="true"
199219
android:exported="false" />
200220
<!-- 测试anr的服务类-->
201221
<service android:name=".crash.MyService" />
202-
<service android:name=".crash.MyCrashService1" android:process=":crash1"/>
203-
<service android:name=".crash.MyCrashService2" android:process=":crash2"/>
204-
<service android:name=".crash.MyCrashService3" android:process=":crash3"/>
222+
<service
223+
android:name=".crash.MyCrashService1"
224+
android:process=":crash1" />
225+
<service
226+
android:name=".crash.MyCrashService2"
227+
android:process=":crash2" />
228+
<service
229+
android:name=".crash.MyCrashService3"
230+
android:process=":crash3" />
205231

206232
<!--测试重启后台服务-->
207233
<service
208234
android:name=".reboot.RebootCustomService"
209235
android:enabled="true"
210236
android:exported="true" />
211237
<!--网络重置监听的服务-->
212-
<service android:name=".network.NetMonitorService"
238+
<service
239+
android:name=".network.NetMonitorService"
213240
android:enabled="true"
214241
android:exported="true" />
215242
<!--重启后广播监听-->

app/src/main/java/com/wave_chtj/example/FeaturesOptionAty.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import com.wave_chtj.example.keeplive.KeepAliveAty;
6060
import com.wave_chtj.example.network.NetChangeAty;
6161
import com.wave_chtj.example.network.NetMonitorAty;
62+
import com.wave_chtj.example.nginx.NginxAty;
6263
import com.wave_chtj.example.screen.ScreenActivity;
6364
import com.wave_chtj.example.serialport.SerialPortAty;
6465
import com.wave_chtj.example.socket.SocketAty;
@@ -71,6 +72,7 @@
7172
import com.wave_chtj.example.util.excel.POIExcelUtils;
7273
import com.wave_chtj.example.util.keyevent.IUsbHubListener;
7374
import com.wave_chtj.example.util.keyevent.UsbHubTools;
75+
import com.wave_chtj.example.video.PlayCacheVideoAty;
7476
import com.wave_chtj.example.video.VideoPlayAty;
7577

7678
import java.io.File;
@@ -197,7 +199,9 @@ public void initData() {
197199
indexBeanList.add(new IndexBean(FKey.KEY_OTA, new String[]{"ota升级(RK|FC)"}, IndexAdapter.LAYOUT_ONE));
198200
indexBeanList.add(new IndexBean(FKey.KEY_INSTALL, new String[]{"静默安装"}, IndexAdapter.LAYOUT_ONE));
199201
indexBeanList.add(new IndexBean(FKey.KEY_BLUETOOTH, new String[]{"蓝牙测试"}, IndexAdapter.LAYOUT_ONE));
202+
indexBeanList.add(new IndexBean(FKey.VIDEO_CACHE, new String[]{"视频录制"}, IndexAdapter.LAYOUT_ONE));
200203
indexBeanList.add(new IndexBean(FKey.KEY_CRASH, new String[]{"死机验证"}, IndexAdapter.LAYOUT_ONE));
204+
indexBeanList.add(new IndexBean(FKey.KEY_NGINX, new String[]{"nginx"}, IndexAdapter.LAYOUT_ONE));
201205
indexBeanList.add(new IndexBean(FKey.KEY_MORE, new String[]{"更多...."}, IndexAdapter.LAYOUT_ONE));
202206
}
203207

@@ -446,12 +450,18 @@ public void run() {
446450
case FKey.KEY_BLUETOOTH:
447451
startAty(BlueToothAty.class);
448452
break;
453+
case FKey.VIDEO_CACHE:
454+
startAty(PlayCacheVideoAty.class);
455+
break;
449456
case FKey.KEY_MORE:
450457
ToastUtils.info("敬请期待!");
451458
break;
452459
case FKey.KEY_CRASH:
453460
CrashTools.crashtest();
454461
break;
462+
case FKey.KEY_NGINX:
463+
startAty(NginxAty.class);
464+
break;
455465
}
456466
}
457467

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package com.wave_chtj.example.nginx;
2+
3+
import android.os.Bundle;
4+
import android.text.Html;
5+
import android.text.method.ScrollingMovementMethod;
6+
import android.view.View;
7+
import android.widget.EditText;
8+
import android.widget.TextView;
9+
10+
import androidx.annotation.Nullable;
11+
12+
import com.face_chtj.base_iotutils.ShellUtils;
13+
import com.face_chtj.base_iotutils.convert.TimeUtils;
14+
import com.face_chtj.base_iotutils.display.DeviceUtils;
15+
import com.face_chtj.base_iotutils.network.NetUtils;
16+
import com.jrummyapps.android.shell.CommandResult;
17+
import com.jrummyapps.android.shell.Shell;
18+
import com.wave_chtj.example.R;
19+
import com.wave_chtj.example.base.BaseActivity;
20+
21+
public class NginxAty extends BaseActivity {
22+
TextView tvResult;
23+
TextView tvNowIp;
24+
EditText etNginxCmd;
25+
26+
@Override
27+
protected void onCreate(@Nullable Bundle savedInstanceState) {
28+
super.onCreate(savedInstanceState);
29+
setContentView(R.layout.activity_nginx);
30+
tvNowIp = findViewById(R.id.tvNowIp);
31+
etNginxCmd = findViewById(R.id.etNginxCmd);
32+
tvResult = findViewById(R.id.tvResult);
33+
tvResult.setMovementMethod(ScrollingMovementMethod.getInstance());
34+
35+
tvNowIp.setText("本机IP:"+DeviceUtils.getLocalIp());
36+
}
37+
38+
public void startOnClick(View view) {
39+
CommandResult result = Shell.SU.run("/data/data/xiaoqidun.anmpp/files/root/android.nginx/sbin/nginx -p /data/data/xiaoqidun.anmpp/files/root/android.nginx/ -c /data/data/xiaoqidun.anmpp/files/root/android.nginx/conf/nginx.conf");
40+
StringBuilder stringBuilder=new StringBuilder();
41+
stringBuilder.append("---------------start >> nginx ----------------\n");
42+
stringBuilder.append("exitCode >> " + result.exitCode + "\n");
43+
stringBuilder.append("stdout >> " + result.getStdout() + "\n");
44+
stringBuilder.append("stderr >> " + result.getStderr() + "\n");
45+
stringBuilder.append("-----------------------end-----------------------\n\r");
46+
showData(stringBuilder.toString().replace("\n","<br />"));
47+
}
48+
49+
public void stopOnClick(View view) {
50+
CommandResult result = Shell.SU.run("/data/data/xiaoqidun.anmpp/files/root/android.nginx/sbin/nginx -p /data/data/xiaoqidun.anmpp/files/root/android.nginx/ -s quit");
51+
StringBuilder stringBuilder=new StringBuilder();
52+
stringBuilder.append("---------------start >> nginx -p -s quit----------------\n");
53+
stringBuilder.append("exitCode >> " + result.exitCode + "\n");
54+
stringBuilder.append("stdout >> " + result.getStdout() + "\n");
55+
stringBuilder.append("stderr >> " + result.getStderr() + "\n");
56+
stringBuilder.append("-----------------------end-----------------------\n\r");
57+
showData(stringBuilder.toString().replace("\n","<br />"));
58+
}
59+
60+
public void versionOnClick(View view) {
61+
CommandResult result = Shell.SU.run("/data/data/xiaoqidun.anmpp/files/root/android.nginx/sbin/nginx -p /data/data/xiaoqidun.anmpp/files/root/android.nginx/ -V");
62+
StringBuilder stringBuilder=new StringBuilder();
63+
stringBuilder.append("---------------start >> nginx -V----------------\n");
64+
stringBuilder.append("exitCode >> " + result.exitCode + "\n");
65+
stringBuilder.append("stdout >> " + result.getStdout() + "\n");
66+
stringBuilder.append("stderr >> " + result.getStderr() + "\n");
67+
stringBuilder.append("-----------------------end-----------------------\n\r");
68+
showData(stringBuilder.toString().replace("\n","<br />"));
69+
}
70+
71+
public void helpOnClick(View view) {
72+
ShellUtils.CommandResult commandResult = ShellUtils.execCommand("/data/data/xiaoqidun.anmpp/files/root/android.nginx/sbin/nginx -p /data/data/xiaoqidun.anmpp/files/root/android.nginx/ -h", true);
73+
StringBuilder stringBuilder=new StringBuilder();
74+
stringBuilder.append("---------------start >> nginx -h----------------\n");
75+
stringBuilder.append("result >> " + commandResult.result + "\n");
76+
stringBuilder.append("succMsg >> " + commandResult.successMsg + "\n");
77+
stringBuilder.append("errMsg >> " + commandResult.errorMsg + "\n");
78+
stringBuilder.append("-----------------------end-----------------------\n\r");
79+
showData(stringBuilder.toString().replace("\n","<br />"));
80+
}
81+
82+
public void exeuOnClick(View view) {
83+
String cmd="/data/root/android.nginx/sbin/"+etNginxCmd.getText().toString();
84+
ShellUtils.CommandResult commandResult = ShellUtils.execCommand(cmd, true);
85+
StringBuilder stringBuilder=new StringBuilder();
86+
stringBuilder.append("---------------"+cmd+"----------------\n");
87+
stringBuilder.append("result >> " + commandResult.result + "\n");
88+
stringBuilder.append("succMsg >> " + commandResult.successMsg + "\n");
89+
stringBuilder.append("errMsg >> " + commandResult.errorMsg + "\n");
90+
stringBuilder.append("-----------------------end-----------------------\n\r");
91+
showData(stringBuilder.toString().replace("\n","<br />"));
92+
}
93+
94+
/**
95+
* 显示数据到UI
96+
*
97+
* @param htmlStr
98+
*/
99+
public void showData(String htmlStr) {
100+
tvResult.append(Html.fromHtml(TimeUtils.getTodayDateHms("yy-MM-dd HH:mm:ss") + ":" + htmlStr));
101+
tvResult.append("\n");
102+
//刷新最新行显示
103+
int offset = tvResult.getLineCount() * tvResult.getLineHeight();
104+
int tvHeight = tvResult.getHeight();
105+
if (offset > 6000) {
106+
tvResult.setText("");
107+
tvResult.scrollTo(0, 0);
108+
} else {
109+
if (offset > tvHeight) {
110+
//Log.d(TAG, "showData: offset >> " + offset + " ,tvHeight >> " + tvHeight);
111+
tvResult.scrollTo(0, offset - tvHeight);
112+
}
113+
}
114+
}
115+
}

app/src/main/java/com/wave_chtj/example/util/FKey.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public class FKey {
4646
public static final int KEY_OTA=42;//ota升级
4747
public static final int KEY_INSTALL=43;//静默安装
4848
public static final int KEY_BLUETOOTH=44;//蓝牙测试
49-
public static final int KEY_CRASH=45;//死机验证
50-
public static final int KEY_MORE=46;//其他
49+
public static final int VIDEO_CACHE=45;//视频录制
50+
public static final int KEY_CRASH=46;//死机验证
51+
public static final int KEY_NGINX=47;//死机验证
52+
public static final int KEY_MORE=48;//其他
5153
}
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package com.wave_chtj.example.video;
2+
3+
import android.media.MediaRecorder;
4+
import android.view.SurfaceView;
5+
6+
import java.io.File;
7+
import java.io.IOException;
8+
import java.util.Timer;
9+
import java.util.TimerTask;
10+
import android.media.MediaRecorder;
11+
import android.view.SurfaceView;
12+
13+
import java.io.File;
14+
import java.io.IOException;
15+
import java.util.Timer;
16+
import java.util.TimerTask;
17+
18+
public class MovieRecorder {
19+
20+
private MediaRecorder mediarecorder;
21+
boolean isRecording;
22+
23+
public void startRecording(SurfaceView surfaceView) {
24+
mediarecorder = new MediaRecorder();// 创建mediarecorder对象
25+
// 设置录制视频源为Camera(相机)
26+
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
27+
// 设置音频源为麦克风
28+
mediarecorder
29+
.setAudioSource(MediaRecorder.AudioSource.MIC);
30+
// 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4
31+
mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
32+
// 设置录制的视频编码h263 h264
33+
mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
34+
// 设置音频编码amr_nb
35+
mediarecorder
36+
.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
37+
// 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
38+
mediarecorder.setVideoSize(320, 240);
39+
// 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
40+
mediarecorder.setVideoFrameRate(15);
41+
mediarecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
42+
mediarecorder.setOrientationHint(90);
43+
// 设置视频文件输出的路径
44+
lastFileName = newFileName();
45+
mediarecorder.setOutputFile(lastFileName);
46+
try {
47+
// 准备录制
48+
mediarecorder.prepare();
49+
// 开始录制
50+
mediarecorder.start();
51+
} catch (IllegalStateException e) {
52+
// TODO Auto-generated catch block
53+
e.printStackTrace();
54+
} catch (IOException e) {
55+
// TODO Auto-generated catch block
56+
e.printStackTrace();
57+
}
58+
isRecording = true;
59+
timeSize = 0;
60+
timer = new Timer();
61+
timer.schedule(new TimerTask() {
62+
@Override
63+
public void run() {
64+
timeSize++;
65+
}
66+
}, 0, 1000);
67+
}
68+
69+
Timer timer;
70+
int timeSize = 0;
71+
private String lastFileName;
72+
73+
public void stopRecording() {
74+
if (mediarecorder != null) {
75+
// 停止
76+
mediarecorder.stop();
77+
mediarecorder.release();
78+
mediarecorder = null;
79+
timer.cancel();
80+
if (null != lastFileName && !"".equals(lastFileName)) {
81+
File f = new File(lastFileName);
82+
String name = f.getName().substring(0,
83+
f.getName().lastIndexOf(".3gp"));
84+
name += "_" + timeSize + "s.3gp";
85+
String newPath = f.getParentFile().getAbsolutePath() + "/"
86+
+ name;
87+
if (f.renameTo(new File(newPath))) {
88+
int i = 0;
89+
i++;
90+
}
91+
}
92+
}
93+
}
94+
95+
public String newFileName() {
96+
try {
97+
return File.createTempFile("/mov_", ".3gp").getAbsolutePath();
98+
} catch (IOException e) {
99+
// TODO Auto-generated catch block
100+
e.printStackTrace();
101+
return null;
102+
}
103+
}
104+
105+
public void release() {
106+
if (mediarecorder != null) {
107+
// 停止
108+
mediarecorder.stop();
109+
mediarecorder.release();
110+
mediarecorder = null;
111+
}
112+
}
113+
114+
}

0 commit comments

Comments
 (0)