2012-02-01 135 views
0

我想设置一个应用程序来在Webview中加载URL,然后让应用程序能够设置任何图像被点击设置为壁纸。从webview设置壁纸URL

到目前为止,我可以加载URL并显示画廊。

我几乎坚持如何设置可点击的图像是壁纸。

任何帮助,将不胜感激。

我的代码:

package com.dg.rWallpapers; 

import java.io.IOException; 
import java.net.URISyntaxException; 
import java.net.URL; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.entity.BufferedHttpEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.app.Activity; 
import android.app.WallpaperManager; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.RelativeLayout; 
import android.widget.Toast; 

import com.google.ads.AdRequest; 
import com.google.ads.AdSize; 
import com.google.ads.AdView; 

public class rWallpapersActivity extends Activity { 
    WebView mWebView; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     /* mWebView.getSettings().setBuiltInZoomControls(true); */ //Removed I do not want zooming. 
     mWebView.getSettings().setUseWideViewPort(true); 
     mWebView.loadUrl("http://wall.dg.net?wallId=5"); 
     mWebView.setWebViewClient(new HelloWebViewClient(this)); 

     // Lookup R.layout.main 
     RelativeLayout layout = (RelativeLayout)findViewById(R.id.ad); 

     AdView adView = new AdView(this, AdSize.BANNER, "xxxx"); 

     // Add the adView to it 
     layout.addView(adView); 

     // Initiate a generic request to load it with an ad 
     AdRequest request = new AdRequest(); 
     //request.setTesting(true); 

     adView.loadAd(request); 

    } 


    public class HelloWebViewClient extends WebViewClient { 

     private WallpaperManager mWallpaperManager; 
     private Context mContext; 

     public HelloWebViewClient(Context context) { 
      mContext = context; 
      mWallpaperManager = WallpaperManager.getInstance(context); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (url.endsWith(".png") || url.endsWith(".jpg")) { 
       try { 
        Bitmap b = downloadImage(url); 
        mWallpaperManager.setBitmap(b); 
        Toast.makeText(mContext, "Done!!", Toast.LENGTH_SHORT).show(); 
        return true; 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      return false; 
     } 

     private Bitmap downloadImage(String fileUrl) throws IOException { 
      try { 
       HttpGet httpRequest = new HttpGet(new URL(fileUrl).toURI()); 
       HttpClient httpClient = new DefaultHttpClient(); 

       HttpResponse response = (HttpResponse) httpClient.execute(httpRequest); 
       BufferedHttpEntity buffer = new BufferedHttpEntity(response.getEntity()); 
       return BitmapFactory.decodeStream(buffer.getContent()); 
      } catch (IllegalArgumentException e) { 
       e.printStackTrace(); 
      } catch (URISyntaxException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 
    } 


    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      mWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 


} 

回答

3

您可以使用自定义WebViewClient并实现shouldOverrideUrlLoading()方法来处理在活动中您的图像点击。在那里,您可以下载图像并将其设置为壁纸。

这里是一个这样的WebViewClient一个例子:

public class MyWebViewClient extends WebViewClient { 

    private WallpaperManager mWallpaperManager; 
    private Context mContext; 

    public MyWebViewClient(Context context) { 
     mContext = context; 
     mWallpaperManager = WallpaperManager.getInstance(context); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.endsWith(".png") || url.endsWith(".jpg") || url.endsWith(".jpeg")) { 
      new AsyncTask<String, Void, Bitmap>() { 

       @Override 
       protected Bitmap doInBackground(String... params) { 
        try { 
         return downloadImage(params[0]); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 

        return null; 
       } 

       @Override 
       protected void onPostExecute(Bitmap result) { 
        if (result != null) { 
         try { 
          mWallpaperManager.setBitmap(result); 
          Toast.makeText(mContext, "Done!!", Toast.LENGTH_SHORT).show(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } 
       } 

      }.execute(url); 
      return true; 
     } 
     return false; 
    } 

    private Bitmap downloadImage(String fileUrl) throws IOException { 
     try { 
      HttpGet httpRequest = new HttpGet(new URL(fileUrl).toURI()); 
      HttpClient httpClient = new DefaultHttpClient(); 

      HttpResponse response = (HttpResponse) httpClient.execute(httpRequest); 
      BufferedHttpEntity buffer = new BufferedHttpEntity(response.getEntity()); 
      return BitmapFactory.decodeStream(buffer.getContent()); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (URISyntaxException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

您的WebViewClient通过setWebClient(new MyWebViewClient(this))在您的活动添加到您的WebView。

+0

你有一个例子,或示例代码?我对android开发完全陌生。顺便说一句,我已经拥有它作为setWebClient() – 2012-02-01 18:19:36

+0

好吧,我得到这部分去: '公共无效onLoadResource(WebView视图,字符串url){ if(url.contains(“。png”)|| url.contains(“ .jpg“)|| url.contains(”。jpeg“)){ //做任何你想做的事 } }' – 2012-02-01 18:54:47

+0

我收到很少的错误。我做了一切,甚至导入了所有需要的文件。 – 2012-02-01 19:16:56