【问题标题】:Wallpaper not properly fit on device screen when using "InputStream"使用“InputStream”时壁纸无法正确显示在设备屏幕上
【发布时间】:2016-04-27 11:31:10
【问题描述】:

我在网上的不同文件夹中有一组图像。我有一个按钮可以将图像设置为设备屏幕上的墙纸。按下按钮后,壁纸开始自动更改(每天一张图像作为您设备上的新壁纸)。问题:在我测试的某些设备上,壁纸不合适。

这是代码:

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 + 随机更换壁纸使用。

【问题讨论】:

    标签: java android


    【解决方案1】:

    这就是答案。它有效。

    ...

    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
        }
    }
    

    ...

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      相关资源
      最近更新 更多