1.0.0(1)添加报错提示

This commit is contained in:
lihongwei 2025-05-09 13:58:03 +08:00
parent 2bed1c2629
commit c9f36af0d0
6 changed files with 115 additions and 21 deletions

View File

@ -59,11 +59,10 @@ dependencies {
implementation("com.github.bumptech.glide:glide:4.16.0") implementation("com.github.bumptech.glide:glide:4.16.0")
annotationProcessor("com.github.bumptech.glide:compiler:4.16.0") annotationProcessor("com.github.bumptech.glide:compiler:4.16.0")
implementation("androidx.room:room-runtime:2.6.1") implementation("androidx.room:room-runtime:2.7.1")
annotationProcessor("androidx.room:room-compiler:2.6.1") annotationProcessor("androidx.room:room-compiler:2.7.1")
implementation("com.squareup.okhttp3:okhttp:4.12.0") implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("com.google.android.exoplayer:exoplayer:2.19.1") implementation("com.google.android.exoplayer:exoplayer:2.19.1")
} }

View File

@ -3,12 +3,19 @@ package com.live.dynamicwallpaper.service;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.net.Uri; import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.service.wallpaper.WallpaperService; import android.service.wallpaper.WallpaperService;
import android.util.Log;
import android.view.SurfaceHolder; import android.view.SurfaceHolder;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource; import com.google.android.exoplayer2.source.ProgressiveMediaSource;
@ -35,6 +42,16 @@ public class LiveWallpaperService extends WallpaperService {
private void setupPlayer() { private void setupPlayer() {
playerInstance = new ExoPlayer.Builder(LiveWallpaperService.this).build(); playerInstance = new ExoPlayer.Builder(LiveWallpaperService.this).build();
playerInstance.setRepeatMode(Player.REPEAT_MODE_ONE); playerInstance.setRepeatMode(Player.REPEAT_MODE_ONE);
// 添加播放错误监听器
playerInstance.addListener(new Player.Listener() {
@Override
public void onPlayerError(@NonNull PlaybackException error) {
Log.e("LiveWallpaperService", "Video playback failed", error);
showErrorPrompt();
// 停止播放并释放资源
releasePlayer();
}
});
configureSource(); configureSource();
} }
@ -74,7 +91,14 @@ public class LiveWallpaperService extends WallpaperService {
private void configureSource() { private void configureSource() {
Uri videoUri = retrieveVideoUri(LiveWallpaperService.this); Uri videoUri = retrieveVideoUri(LiveWallpaperService.this);
if (videoUri != null && playerInstance != null) { if (videoUri == null) {
Log.w("LiveWallpaperService", "Invalid or missing video URI");
showErrorPrompt();
releasePlayer();
return;
}
if (playerInstance != null) {
try {
MediaItem mediaItem = MediaItem.fromUri(videoUri); MediaItem mediaItem = MediaItem.fromUri(videoUri);
MediaSource source = new ProgressiveMediaSource.Factory( MediaSource source = new ProgressiveMediaSource.Factory(
new DefaultDataSource.Factory(LiveWallpaperService.this)) new DefaultDataSource.Factory(LiveWallpaperService.this))
@ -82,6 +106,11 @@ public class LiveWallpaperService extends WallpaperService {
playerInstance.setMediaSource(source); playerInstance.setMediaSource(source);
playerInstance.prepare(); playerInstance.prepare();
playerInstance.setPlayWhenReady(true); playerInstance.setPlayWhenReady(true);
} catch (Exception e) {
Log.e("LiveWallpaperService", "Failed to configure video source", e);
showErrorPrompt();
releasePlayer();
}
} }
} }
@ -98,5 +127,13 @@ public class LiveWallpaperService extends WallpaperService {
File videoFile = new File(videoPath); File videoFile = new File(videoPath);
return (videoFile.exists() && videoFile.isFile()) ? Uri.fromFile(videoFile) : null; return (videoFile.exists() && videoFile.isFile()) ? Uri.fromFile(videoFile) : null;
} }
private void showErrorPrompt() {
// 使用 Handler 切换到主线程显示 Toast
new Handler(Looper.getMainLooper()).post(() -> {
Toast.makeText(LiveWallpaperService.this,
"This video cannot be played. Please go back and try again later.", Toast.LENGTH_LONG).show();
});
}
} }
} }

View File

@ -11,7 +11,9 @@ import android.widget.Toast;
import androidx.activity.EdgeToEdge; import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import com.live.dynamicwallpaper.R; import com.live.dynamicwallpaper.R;
@ -38,6 +40,8 @@ public class DynamicActivity extends AppCompatActivity {
setContentView(ui.getRoot()); setContentView(ui.getRoot());
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (view, insets) -> { ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (view, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
view.setPadding(systemBars.left, 0, systemBars.right, systemBars.bottom);
return insets; return insets;
}); });
@ -109,33 +113,58 @@ public class DynamicActivity extends AppCompatActivity {
} }
private void prepareVideoPlayback() { private void prepareVideoPlayback() {
if (ui != null && contentData.getWallpaperPath() != null) { if (ui == null || contentData.getWallpaperPath() == null) {
showErrorPrompt();
return;
}
File video = new File(contentData.getWallpaperPath()); File video = new File(contentData.getWallpaperPath());
if (video.exists()) { if (video.exists()) {
try {
ui.videoView.setVideoPath(contentData.getWallpaperPath()); ui.videoView.setVideoPath(contentData.getWallpaperPath());
ui.videoView.start(); ui.videoView.start();
ui.videoView.setOnPreparedListener(media -> media.setLooping(true)); ui.videoView.setOnPreparedListener(media -> media.setLooping(true));
} catch (Exception e) {
Log.e("LivePreview", "Video playback failed", e);
showErrorPrompt();
}
} else { } else {
Log.w("LivePreview", "Missing video file: " + contentData.getWallpaperPath()); Log.w("LivePreview", "Missing video file: " + contentData.getWallpaperPath());
} showErrorPrompt();
} }
} }
private void applyLiveWallpaper() { private void applyLiveWallpaper() {
String videoPath = contentData.getWallpaperPath();
if (videoPath == null || !new File(videoPath).exists()) {
showErrorPrompt();
return;
}
SharedPreferences preferences = getSharedPreferences("WallpaperPrefs", MODE_PRIVATE); SharedPreferences preferences = getSharedPreferences("WallpaperPrefs", MODE_PRIVATE);
preferences.edit().putString("video_path", contentData.getWallpaperPath()).apply(); preferences.edit().putString("video_path", videoPath).apply();
WallpaperManager manager = WallpaperManager.getInstance(this); WallpaperManager manager = WallpaperManager.getInstance(this);
try { try {
manager.clear(); manager.clear();
} catch (Exception ignored) { } catch (Exception e) {
Log.e("LivePreview", "Failed to clear wallpaper", e);
} }
Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
new ComponentName(this, LiveWallpaperService.class)); new ComponentName(this, LiveWallpaperService.class));
try {
startActivity(intent); startActivity(intent);
finish(); finish();
} catch (Exception e) {
Log.e("LivePreview", "Failed to set wallpaper", e);
showErrorPrompt();
}
}
private void showErrorPrompt() {
if (isActive() && ui != null) {
Toast.makeText(this, "Cannot play video. Please try again later.", Toast.LENGTH_LONG).show();
}
} }
private void observeFavoriteState() { private void observeFavoriteState() {

View File

@ -23,6 +23,7 @@
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:layout_marginTop="32dp" android:layout_marginTop="32dp"
android:src="@drawable/back" android:src="@drawable/back"
android:background="@drawable/rounded_rectangle_gradient"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

28
app/text.html Normal file
View File

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>POST 测试表单</title>
</head>
<body>
<h2>MediaFetcher POST 测试</h2>
<form action="https://neutrolabgames.com/LiveLoop/AppData/jmywall.php" method="post" target="_blank">
<label for="pi">pi (id):</label><br>
<input type="text" id="pi" name="pi" required><br><br>
<label for="medium">medium:</label><br>
<input type="text" id="medium" name="medium" value="5eV6snEwfY7Yv6Ub" required><br><br>
<label for="alpha">alpha (asset name):</label><br>
<input type="text" id="alpha" name="alpha"><br><br>
<label for="version">version:</label><br>
<input type="text" id="version" name="version" value="DL8" required><br><br>
<label for="quality">quality (mode):</label><br>
<input type="text" id="quality" name="quality" required><br><br>
<button type="submit">提交 POST 请求</button>
</form>
</body>
</html>

View File

@ -1,5 +1,5 @@
[versions] [versions]
agp = "8.9.1" agp = "8.10.0"
junit = "4.13.2" junit = "4.13.2"
junitVersion = "1.2.1" junitVersion = "1.2.1"
espressoCore = "3.6.1" espressoCore = "3.6.1"