2016-03-29 77 views
0

我在线有不同文件夹中的图像组。我有一个按钮在设备屏幕上将图像设置为壁纸。一旦按下按钮,壁纸就会自动变化(每天一张图像作为设备上的新壁纸)。问题:在我测试的一些设备上,壁纸不适合。当使用“InputStream”时,壁纸在设备屏幕上不适合

这是代码:

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

这是答案。有用。

...

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

...