1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Android 4.0 carrega um swf cortado no webview

Bom dia pessoal estou com um problema ao realizar o carregamento de um swf simples no android 4.0.

Estou usando um FrameLayout para construir meu layout. Nele eu insiro um webview definindo o tamanho(LxA) que o mesmo deve possuir e dps posiciono a webview onde eu desejo. No entanto ao carregar o swf o mesmo não está ocupando toda á area do webview.

Segue imagem da ocorrência:

https://www.filepicker.io/api/file/kGkCKm5RpaQsyBBhsScf

package swf.browser;

import java.lang.reflect.InvocationTargetException;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Point;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.widget.FrameLayout;

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        WindowManager w = getWindowManager();
        Display d = w.getDefaultDisplay();
        DisplayMetrics metrics = new DisplayMetrics();
        d.getMetrics(metrics);
        int SCREEN_WIDTH =  300;
        int SCREEN_HEIGHT = 300;

        try {
            Point realSize = new Point();
            Display.class.getMethod("getRealSize", Point.class).invoke(d,
                    realSize);
            SCREEN_WIDTH = realSize.x;

            SCREEN_HEIGHT = realSize.y;
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }        

        FrameLayout frame = new FrameLayout(this);

        WebView browser = new WebView(this);
        WebSettings webSettings = browser.getSettings();
        webSettings.setPluginState(PluginState.ON);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setAppCacheEnabled(false);

        browser.setClickable(true);
        browser.setKeepScreenOn(true);


        StringBuilder html = new StringBuilder();

        html.append("<html>\n");
        html.append("<body style=\"margin:0;width:100%;height:100%;overflow:hidden;background:green");
        html.append(";\">\n");    
        String vars = "";
        String filename = "layout/template/39.swf";

        html.append("<embed id=\"plugin\" name=\"plugin\" width=\"100%\" height=\"100%\" \n"
        + "allowScriptAccess=\"sameDomain\" scale=\"exactfit\" wmode=\"transparent\" src=\""
        + filename
        + "\" \n"
        + "type=\"application/x-shockwave-flash\" FlashVars=\""
        + vars
        + "\">\n");        

        html.append("</body>\n");
        html.append("</html>");    

        Log.d("Browser", html.toString());        

        browser.loadDataWithBaseURL("http://localhost:8081/",html.toString(), "text/html", "UTF-8", null);

        frame.addView(browser, SCREEN_WIDTH - 100, SCREEN_HEIGHT - 100);

        browser.setTranslationX(100);
        browser.setTranslationY(100);

        setContentView(frame);
    }
}

Notei que se não uso o comando browser.setTranslationX(100) para posicionar a webview o swf é carregado usando toda a área disponível na webview.

Imagem abaixo:

https://www.filepicker.io/api/file/QtJV41kvSiiCPSkYOarP

Testei o mesmo código em um android 4.2.2 e funciona perfeitamente. Notei ainda que a parte não aproveitada dentro da webview para ser exatamente do mesmo valor que o aplicado no setTranslationX.

Alguém sabe me dizer o que pode ser ?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags android flash ou faça a sua própria pergunta.