我可以在程序中设置背景。 我想从互联网上获取一张照片,并在点击按钮时将其设置在后台。 我问任何人都有一个解决方案,建议我把照片放在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"));
}
});
答案 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