我在线有不同文件夹中的图像集。我有一个按钮将图像设置为设备屏幕上的壁纸。按下按钮后,壁纸会自动开始更改(每天一张图像作为设备上的新壁纸)。问题:壁纸不适合我测试的某些设备。
这是代码:
import android.app.IntentService;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Random;
import java.util.Set;
public class WallpaperService extends IntentService {
public static final String STANDARD = "standard";
public WallpaperService() {
super("martynas_notification_service");
}
@Override
protected void onHandleIntent(Intent intent) {
changeRandomly(this);
}
public void changeRandomly(Context context) {
Set<String> urls = getSavedUrls();
if (urls == null) {
return;
}
String randomUrl = getRandomUrl(urls);
WallpaperManager wpm = WallpaperManager.getInstance(context);
try {
InputStream ins = new URL(randomUrl).openStream();
wpm.setStream(ins);
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
private Set<String> getSavedUrls() {
SharedPreferences preferences = getSharedPreferences(STANDARD, Context.MODE_PRIVATE);
return preferences.getStringSet(ExitAppActivity.CHOSEN_FOLDER_URLS, null);
}
private String getRandomUrl(Set<String> urls) {
Random randomGenerator = new Random();
int randomNumber = randomGenerator.nextInt(urls.size());
return (String) urls.toArray()[randomNumber];
}
}
有人建议使用DisplayMetrics,BitmapFactory,但我不确定如何将它与InputStream +随机更改壁纸一起使用。
答案 0 :(得分:0)
这是答案。它有效。
...
public void changeRandomly(Context context) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
int height = metrics.heightPixels;
int width = metrics.widthPixels;
Set<String> urls = getSavedUrls();
if (urls == null) {
return;
}
String randomUrl = getRandomUrl(urls);
try {
InputStream ins = new URL(randomUrl).openStream();
Bitmap tempbitMap = BitmapFactory.decodeStream(ins);
Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap, width, height, true);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
wallpaperManager.setBitmap(bitmap);
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
...