2012-02-01 7 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()メソッドを実装することができます。そこで、画像をダウンロードして壁紙として設定することができます。

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

あなたの活動にsetWebClient(new MyWebViewClient(this))を経由してお使いのWebViewにWebViewClientを追加します。ここでは

は、このような WebViewClientための一例です。

+0

サンプルコードがありますか?私は全く新しいアンドロイド開発です。私はすでにsetWebClient()として持っています –

+0

私はこの部分を行っています: 'public void onLoadResource(WebView view、String url){ if(url.contains(" .png ")|| url.contains(" .jpg ")|| url.contains("。jpeg ")){ //何でもしてください } }' –

+0

私は少しエラーが発生しています。私はすべてを行い、必要なすべてのファイルをインポートしました。 –

関連する問題