Compare commits

...

10 Commits

Author SHA1 Message Date
wangsiyuan d7cc7beb58 更新 .gitignore 2023-12-07 22:37:17 +08:00
wangsiyuan df5a05f48c 更新 activity_main.xml 2023-12-07 21:37:15 +08:00
wangsiyuan 425876339d 更新 PermissionUtils.java 2023-12-07 21:37:10 +08:00
wangsiyuan cfbca44456 创建 BatteryOptimizationUtil.java 2023-12-07 21:37:06 +08:00
wangsiyuan 2363429491 更新 MainActivity.java 2023-12-07 21:37:02 +08:00
wangsiyuan d3e4cc343e 更新 themes.xml 2023-12-07 19:23:35 +08:00
wangsiyuan a56e528421 更新 strings.xml 2023-12-07 19:23:33 +08:00
wangsiyuan 2cc080b12c 更新 colors.xml 2023-12-07 19:23:30 +08:00
wangsiyuan 1cb45c2067 更新 themes.xml 2023-12-07 19:23:26 +08:00
wangsiyuan cdecb938a1 更新 activity_main.xml 2023-12-07 19:23:22 +08:00
9 changed files with 133 additions and 141 deletions

112
.gitignore vendored
View File

@ -1,113 +1,5 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.idea
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
# Built application files
*.apk
*.ap_
*.aab
# Files for the Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/
release/
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
# IntelliJ
*.iml
.idea/
.idea_modules/
# Keystore files
*.jks
*.keystore
# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
# Google Services (e.g. APIs or Firebase)
google-services.json
# Freeline
freeline.py
freeline/
freeline_project_description.json
# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md
# Version control
vcs.xml
# lint
lint/intermediates/
lint/generated/
lint/outputs/
lint/tmp/
lint/reports/
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-debug/
# Local config
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
.idea/caches
# Android Patch
gen-external-apklibs
app/debug/app-debug.apk

View File

@ -1,44 +1,38 @@
package com.nbee.echolink;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.nbee.echolink.service.MonitorService;
import com.nbee.echolink.utils.PermissionUtils;
import timber.log.Timber;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private final String TAG = "MainActivity";
private PermissionUtils permissionUtils;
private TextView logTextView; // 将类型从 View 更改为 TextView
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
logTextView = findViewById(R.id.logTextView);
updateLog("初始化日志...");
permissionUtils = new PermissionUtils(this);
permissionUtils.checkPermissions();
Button myButton = findViewById(R.id.myButton);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 记录日志
Timber.d("Button was clicked");
}
});
// 启动MonitorService服务
Intent serviceIntent = new Intent(this, MonitorService.class);
startService(serviceIntent);
@ -49,4 +43,37 @@ public class MainActivity extends AppCompatActivity {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
permissionUtils.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onResume() {
super.onResume();
String logContent = readLogFile();
updateLog(logContent);
}
private void updateLog(String newLog) {
logTextView.setText(newLog);
}
private String readLogFile() {
try {
File logFile = new File(getFilesDir(), "logs/echoLink.log"); // 日志文件的路径
if (!logFile.exists()) {
return "日志文件不存在";
}
StringBuilder logContent = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(logFile))) {
String line;
while ((line = reader.readLine()) != null) {
logContent.append(line).append("\n");
}
}
return logContent.toString();
} catch (IOException e) {
e.printStackTrace();
return "读取日志文件时出错";
}
}
}

View File

@ -0,0 +1,50 @@
package com.nbee.echolink.utils;
import static android.content.Context.POWER_SERVICE;
import static androidx.core.content.ContextCompat.getSystemService;
import static androidx.core.content.ContextCompat.startActivity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
import android.provider.Settings;
import timber.log.Timber;
public class BatteryOptimizationUtil {
/**
*
*/
public static boolean isAppIgnoringBatteryOptimizations(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PowerManager pm = (PowerManager) context.getSystemService(POWER_SERVICE);
if (pm != null) {
return pm.isIgnoringBatteryOptimizations(context.getPackageName());
}
}
return true; // 在低于Android 6.0的设备上默认为true
}
/**
*
*/
public static void requestIgnoreBatteryOptimization(Context context) {
Timber.d("请求电池优化白名单");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm != null && !pm.isIgnoringBatteryOptimizations(packageName)) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 添加FLAG_ACTIVITY_NEW_TASK标志
context.startActivity(intent);
}
}
}
}

View File

@ -2,13 +2,14 @@ package com.nbee.echolink.utils;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.widget.Toast;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.Arrays;
import timber.log.Timber;

View File

@ -5,14 +5,32 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- 用于显示日志标题的 TextView -->
<TextView
android:layout_width="wrap_content"
android:id="@+id/logTitleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:text="日志"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintEnd_toEndOf="parent" />
<!-- ScrollView 包含一个 TextView 用于显示日志内容 -->
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/logTitleTextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<TextView
android:id="@+id/logTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -10,7 +10,7 @@
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<item name="android:statusBarColor">@color/grey</item>
<!-- Customize your theme here. -->
</style>
</resources>

View File

@ -7,4 +7,5 @@
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="grey">#808080</color>
</resources>

View File

@ -3,4 +3,7 @@
<string name="call_api_url">https://api.kimgo.cn/api/call</string>
<string name="message_api_url">https://api.kimgo.cn/api/sms</string>
<string name="access_token">gKGCDSgWV82XbU0H</string>
<string name="notification_title">监控服务运行中</string>
<string name="notification_text">EchoLink正在运行</string>
</resources>

View File

@ -2,7 +2,7 @@
<!-- Base application theme. -->
<style name="Theme.EchoLink" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimary">@color/teal_700</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
@ -10,7 +10,7 @@
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<item name="android:statusBarColor">@color/grey</item>
<!-- Customize your theme here. -->
</style>
</resources>