diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3b862ee..db7a453 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ - + - + + + + android:usesCleartextTraffic="true" + tools:ignore="UnusedAttribute"> - @@ -55,7 +61,8 @@ android:name=".NetworkChangeReceiver" android:exported="true"> - + @@ -75,4 +82,4 @@ android:resource="@xml/file_paths" /> - \ No newline at end of file + diff --git a/app/src/main/java/com/lizongying/mytv/MainActivity.kt b/app/src/main/java/com/lizongying/mytv/MainActivity.kt index 3d5d49a..cee1495 100644 --- a/app/src/main/java/com/lizongying/mytv/MainActivity.kt +++ b/app/src/main/java/com/lizongying/mytv/MainActivity.kt @@ -1,7 +1,9 @@ package com.lizongying.mytv +import android.content.pm.PackageManager import android.os.Build import android.os.Bundle +import android.os.Environment import android.os.Handler import android.os.Looper import android.util.Log @@ -15,6 +17,8 @@ import android.view.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN import android.view.View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION import android.view.WindowManager import android.widget.Toast +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.lifecycle.lifecycleScope @@ -24,7 +28,11 @@ import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.launch - +import java.io.File +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale +import android.Manifest class MainActivity : FragmentActivity(), Request.RequestListener, OnSharedPreferenceChangeListener { @@ -68,6 +76,32 @@ class MainActivity : FragmentActivity(), Request.RequestListener, OnSharedPrefer window.setAttributes(lp) } + // 检查并请求权限 + if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + Toast.makeText(this, "应用需要写入存储的权限以保存日志文件。", Toast.LENGTH_LONG).show() + } else { + ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE), PERMISSION_REQUEST_CODE) + } + } + + val dateFormat = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()) + val currentTime = dateFormat.format(Date()) + val fileName = "myTvLogFile_$currentTime.txt" + + try { + val downloadsDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + val outputFile = File(downloadsDirectory, fileName) + + if (!outputFile.exists()) { + outputFile.createNewFile() + } + logFile.startCapturingToFile(outputFile) + + Log.d(TAG, "File created: ${outputFile.absolutePath}") + } catch (e: Exception) { + Log.e(TAG, "Error creating file", e) + } window.decorView.apply { systemUiVisibility = @@ -624,6 +658,7 @@ class MainActivity : FragmentActivity(), Request.RequestListener, OnSharedPrefer private companion object { const val TAG = "MainActivity" + const val PERMISSION_REQUEST_CODE = 1 } override fun onSharedPreferenceChanged(key: String) { diff --git a/app/src/main/java/com/lizongying/mytv/logFile.java b/app/src/main/java/com/lizongying/mytv/logFile.java new file mode 100644 index 0000000..3e161bc --- /dev/null +++ b/app/src/main/java/com/lizongying/mytv/logFile.java @@ -0,0 +1,43 @@ +package com.lizongying.mytv; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.InputStreamReader; +import android.util.Log; + +public class logFile { + private static final String TAG = "logFile"; // 日志标签定义 + + public static void startCapturingToFile(File outputFile) { + new Thread(() -> { + Process clearProcess = null; + Process logcatProcess = null; + + try { + // 清除当前logcat缓存 + clearProcess = Runtime.getRuntime().exec("logcat -c"); + + logcatProcess = Runtime.getRuntime().exec("logcat"); + BufferedReader reader = new BufferedReader(new InputStreamReader(logcatProcess.getInputStream())); + BufferedWriter writer =new BufferedWriter(new FileWriter(outputFile, true)); + + String line; + while ((line = reader.readLine()) != null) { + writer.append(line).append("\n"); + } + + writer.flush(); + writer.close(); + reader.close(); + + } catch (Exception e) { + Log.e(TAG, "Error capturing log to file", e); + } finally { + if (clearProcess != null) clearProcess.destroy(); + if (logcatProcess != null) logcatProcess.destroy(); + } + }).start(); + } +}