从网址设置壁纸

时间:2017-08-02 03:56:15

标签: java android

我可以在程序中设置背景。 我想从互联网上获取一张照片,并在点击按钮时将其设置在后台。 我问任何人都有一个解决方案,建议我把照片放在drawable中。 但我不想增加我的节目量。 如果你有解决方案,请。 来吧,从互联网上下载一张图片并将其放在后台。 我问我的一个朋友解决方案,建议代码,但是当点击按钮时,错误强制关闭。 如果你知道问题出在哪里,请告诉我 感谢

b1 = (Button) findViewById(R.id.button1);
b1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        WallpaperManager mywallpaper =  WallpaperManager.getInstance(getApplicationContext());
        mywallpaper.getCropAndSetWallpaperIntent(Uri.parse("Url"));
    }
});

3 个答案:

答案 0 :(得分:0)

Android不允许您在以android蜂窝3.0开头的主UI线程上执行网络操作,请参阅此链接了解更多详情https://developer.android.com/training/basics/network-ops/connecting.html

下载图像的正确方法是使用AsyncTask下载壁纸,然后调用在AsyncTask的onPostExecute(Result result)中设置墙纸的方法,因为该方法在UI线程上运行。

这将是您的AsyncTask

的框架
private class DownloadPictureTask extends AsyncTask<URL, Void, Bitmap> {
 protected Long doInBackground(URL... urls) {
   //this method runs on the background thread and downloads a bitmap
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      try {

    HttpURLConnection con = (HttpURLConnection) ( new URL(url)).openConnection();
    con.setDoInput(true);
    con.connect();

    InputStream is = con.getInputStream();
    Bitmap myBitmap = BitmapFactory.decodeStream(is);
    return myBitmap;
       }
catch(Throwable t) {
    t.printStackTrace();
    return null;
                    }

 }

 protected void onProgressUpdate(Void... progress) {
     //put code here if you want to update the progress of the download on the ui
 }

 protected void onPostExecute(Bitmap bitmap) {
     //this runs on the Ui thread, put code here to set the imageview such as the following:
    imageView.setImageBitmap(bitmap)
 }
}

答案 1 :(得分:0)

从给定网址获取位图并设置图像。

示例代码:

public Bitmap downloadImage() {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {

        HttpURLConnection con = (HttpURLConnection) ( new URL(url)).openConnection();
        con.setDoInput(true);
        con.connect();

        InputStream is = con.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(is);
        return myBitmap;
    }
    catch(Throwable t) {
        t.printStackTrace();
        return null;
    }


}

在imageview中设置位图: -

imageView.setImageBitmap(bitmap)

答案 2 :(得分:0)

您可以使用任何图像加载器,加载或下载后,您可以将位图设置为壁纸,请检查以下示例

public void setWallpaperFromUrl(String imgUrl){
       ImageView imageView=new ImageView(this);
       ImageLoader.getInstance().displayImage(imgUrl, imageView, options, new SimpleImageLoadingListener() {
           @Override
           public void onLoadingStarted(String imageUri, View view) {

           }


           @Override
           public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

           }

           @Override
           public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
               WallpaperManager wallManager = WallpaperManager.getInstance(AppApplication.getAppContext());
               try {
                   //wallManager.setBitmap(loadedImage);
                   wallManager.setBitmap(loadedImage);

                   Toast.makeText(getActivity(), "Wallpaper Set Successfully!!", Toast.LENGTH_SHORT).show();
               } catch (IOException e) {
                   Toast.makeText(getActivity(), "Setting WallPaper Failed!!", Toast.LENGTH_SHORT).show();
               }
           }
       });
   }

有关通用图像加载器的更多信息:https://github.com/nostra13/Android-Universal-Image-Loader