Java 使用“时,壁纸未正确安装在设备屏幕上”;“输入流”;
我在网上的不同文件夹中有一组图像。我有一个按钮可以将图像设置为设备屏幕上的壁纸。按下按钮后,壁纸开始自动更改(每天一张图像作为设备上的新壁纸)。问题:我测试过的一些设备上的壁纸不合适 代码如下:Java 使用“时,壁纸未正确安装在设备屏幕上”;“输入流”;,java,android,Java,Android,我在网上的不同文件夹中有一组图像。我有一个按钮可以将图像设置为设备屏幕上的壁纸。按下按钮后,壁纸开始自动更改(每天一张图像作为设备上的新壁纸)。问题:我测试过的一些设备上的壁纸不合适 代码如下: import android.app.IntentService; import android.app.WallpaperManager; import android.content.Context; import android.content.Intent; import android.con
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];
}
}
导入android.app.IntentService;
导入android.app.wallperManager;
导入android.content.Context;
导入android.content.Intent;
导入android.content.SharedReferences;
导入java.io.IOException;
导入java.io.InputStream;
导入java.net.URL;
导入java.util.Random;
导入java.util.Set;
公共类服务扩展了IntentService{
公共静态最终字符串STANDARD=“STANDARD”;
公共服务(){
超级(“martynas_通知服务”);
}
@凌驾
受保护的手部内容无效(意图){
(这个);
}
公共void随机更改(上下文){
设置URL=getSavedUrls();
如果(URL==null){
返回;
}
字符串randomUrl=getRandomUrl(URL);
WallpareManager wpm=wallpareManager.getInstance(上下文);
试一试{
InputStream ins=新URL(随机URL).openStream();
wpm.setStream(ins);
}捕获(IOE异常){
//TODO自动生成的捕捉块
}
}
私有集getSavedUrls(){
SharedReferences首选项=GetSharedReferences(标准,Context.MODE\u PRIVATE);
返回preferences.getStringSet(ExitAppActivity.Selected\u FOLDER\u URL,null);
}
私有字符串getRandomUrl(设置URL){
Random randomGenerator=新的Random();
int randomNumber=randomGenerator.nextInt(url.size());
返回(字符串)URL.toArray()[randomNumber];
}
}
有些人建议使用DisplayMetrics、BitmapFactory,但我不确定如何将其用于InputStream+随机更改的墙纸。答案如下。它起作用了
public void随机更改(上下文){
DisplayMetrics=Resources.getSystem().getDisplayMetrics();
int height=metrics.heightPixels;
int width=metrics.widthPixels;
设置URL=getSavedUrls();
如果(URL==null){
返回;
}
字符串randomUrl=getRandomUrl(URL);
试一试{
InputStream ins=新URL(随机URL).openStream();
位图tempbitMap=BitmapFactory.decodeStream(ins);
位图位图=位图.createScaledBitmap(tempbitMap,宽度,高度,true);
壁纸管理器壁纸管理器=壁纸管理器.getInstance(上下文);
壁纸管理器。设置壁纸偏移步骤(1,1);
壁纸管理器。建议的所需尺寸(宽度、高度);
壁纸管理器.setBitmap(位图);
}捕获(IOE异常){
//TODO自动生成的捕捉块
}
}
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
}
}