0

我只是想在应用程序中的 web 视图中加载https://latestsightings.startraqdome.com/mobile/

这是我的代码:

仪表板.Java:

@SuppressWarnings({ "deprecation", "unused" })
public class Dashboard extends Activity {

public String BASE_URL = "https://latestsightings.startraqdome.com/mobile/";
public String DASHBOARD_URL = BASE_URL + "dashboard/";
public String CONTACT_URL = BASE_URL + "contact/";

private JavascriptInterface jsInterface;

  WebViewClient yourWebClient = new WebViewClient()
  {
      // Override page so it's load on my view only
      @Override
      public boolean shouldOverrideUrlLoading(WebView  view, String  url)
      {
       // This line we let me load only pages inside Firstdroid Webpage
       if ( url.contains("firstdroid") == true )
          // Load new URL Don't override URL Link
          return false;

       // Return true to override url loading (In this case do nothing).
       return true;
      }
  };

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dashboard);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

    WebView engine = (WebView) findViewById(R.id.web_engine);


    // Progress bar.
    // With full screen app, window progress bar (FEATURE_PROGRESS) doesn't     seem to show,
    // so we use an explicitly created one.
    final ProgressBar progressBar = (ProgressBar)     findViewById(R.id.progressbar);

    engine.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress)
        {
            progressBar.setProgress(progress);
        }
    });

    engine.setWebViewClient(new FixedWebViewClient() {
        public void onPageStarted(WebView view, String url, Bitmap favicon)
        {
            jsInterface.enablePreferencesMenu  = false;
            jsInterface.modalIsVisible = false;
            jsInterface.urlForSharing = null;
            progressBar.setVisibility(View.VISIBLE);
        }

        public void onPageFinished(WebView view, String url)
        {
            progressBar.setVisibility(View.GONE);
        }
    });
    engine.getSettings().setJavaScriptEnabled(true);
    jsInterface = new JavascriptInterface();
    try {
        ComponentName comp = new ComponentName(this, Dashboard.class);
        PackageInfo pinfo =     getPackageManager().getPackageInfo(comp.getPackageName(), 0);
        jsInterface.versionCode = pinfo.versionCode;
    } catch(android.content.pm.PackageManager.NameNotFoundException e) {
    }

    engine.addJavascriptInterface(jsInterface, "androidlearnscripture");
    engine.loadUrl(BASE_URL);
}

private WebView getEngine() {
    return (WebView) findViewById(R.id.web_engine);
}

public void onBackPressed() {
    WebView engine = getEngine();
    String url = engine.getUrl(); 
    if (jsInterface.modalIsVisible) {
        engine.loadUrl("javascript: learnscripture.hideModal();");
    } else if (url != null && (
            url.equals(BASE_URL) ||
            url.equals(DASHBOARD_URL) ||
            !engine.canGoBack())) {
        // exit
        super.onBackPressed();
    } else {
        // go back a page, like normal browser
        engine.goBack();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem prefs = menu.findItem(R.id.preferences_menuitem);
    if (prefs != null) {
        prefs.setVisible(jsInterface.enablePreferencesMenu);
    }
    super.onPrepareOptionsMenu(menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.dashboard_menuitem:
        getEngine().loadUrl(DASHBOARD_URL);
        return true;
    case R.id.refresh_menuitem:
        getEngine().reload();
        return true;
    case R.id.preferences_menuitem:
        getEngine().loadUrl("javascript: learnscripture.showPreferences()");
        return true;
    case R.id.contact_menuitem:
        getEngine().loadUrl(CONTACT_URL);
        return true;
    case R.id.share_url_menuitem:
        final String url = (jsInterface.urlForSharing != null
                            ? jsInterface.urlForSharing
                            : getEngine().getUrl());
        Intent i = new Intent(Intent.ACTION_SEND);
        i.setType("text/plain");
        i.putExtra(Intent.EXTRA_SUBJECT, "LearnScripture URL");
        i.putExtra(Intent.EXTRA_TEXT, url);
        startActivity(Intent.createChooser(i, "Share URL"));
    default:
        return super.onOptionsItemSelected(item);
    }
}

private class FixedWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith(BASE_URL) || url.startsWith("javascript:")) {
            // handle by the WebView
            return false;
        } else if (url.startsWith("mailto:")) {
            MailTo mt = MailTo.parse(url);
            Intent i = new Intent(Intent.ACTION_SEND);
            i.setType("message/rfc822");
            i.putExtra(Intent.EXTRA_EMAIL, new String[]{mt.getTo()});
            i.putExtra(Intent.EXTRA_SUBJECT, mt.getSubject());
            i.putExtra(Intent.EXTRA_CC, mt.getCc());
            i`enter code here`.putExtra(Intent.EXTRA_TEXT, mt.getBody());
            view.getContext().startActivity(i);
            view.reload();
            return true;
        } else {
            // Use external browser for anything not on this site
            Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            view.getContext().startActivity(i);
            return true;
        }
    }
}

// The methods of JavascriptInterface are called from javascript.
// The attributes are accessed from the Dashboard class.
// This is deliberately a dumb container class to stop possible
// security issues of javascript controlling Java app.
final class JavascriptInterface {
    public boolean enablePreferencesMenu = false;
    public boolean modalIsVisible = false;
    public int versionCode = 0;
    public String urlForSharing = null;

    public void setEnablePreferencesMenu() {
        enablePreferencesMenu = true;
    }

    public void setModalIsVisible(boolean visible) {
        modalIsVisible = visible;
    }

    // This is useful for allowing the web site to be able to detect
    // old app versions and prompt the user to upgrade.
    public int getVersionCode() {
        return versionCode;
    }

    public void setUrlForSharing(String url) {
        urlForSharing = url;
        // Acquire a reference to the system Location Manager
        LocationManager locationManager = (LocationManager)     this.getSystemService(Context.LOCATION_SERVICE);

        // Define a listener that responds to location updates
        LocationListener locationListener = new LocationListener() {
            public void onLocationChanged1(Location location) {
              // Called when a new location is found by the network     location provider.
              makeUseOfNewLocation(location);
            }

            private void makeUseOfNewLocation(Location location) {
                // TODO Auto-generated method stub

            }


            public void onStatusChanged(String provider, int status,     Bundle extras) {}

            public void onProviderEnabled(String provider) {}

            public void onProviderDisabled(String provider) {}

            @Override
            public void onLocationChanged(Location arg0) {
                // TODO Auto-generated method stub

            }
          };

        // Register the listener with the Location Manager to receive location updates
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,     locationListener);
    }

    private LocationManager getSystemService(String locationService) {
        // TODO Auto-generated method stub
        return null;

    }
     public void onReceivedSslError(WebView view, SslErrorHandler handler,     SslError error) {
         handler.proceed(); // Ignore SSL certificate errors
     }
}

}

这是我的 Manifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.learnscripture.webviewapp"
android:versionCode="11"
android:versionName="1.5" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="9" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
enter code here
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="net.learnscripture.webviewapp.Dashboard"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/fullscreen_content_controls"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
    >
<ProgressBar android:id="@+id/progressbar"
             style="?android:attr/progressBarStyleHorizontal"
             android:layout_width="fill_parent"
             android:layout_height="3dp"
             android:max="100"
             android:visibility="gone"
/>

<WebView android:id="@+id/web_engine"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
        />
</LinearLayout>

当我运行它时,它会在 webview 中打开,但无法正确加载。如果我随后将 URL 更改为“”(省略 s),它有时会在浏览器中完全打开,退出我不想要的应用程序,或者在应用程序中留下空白页面。

我必须做什么?

我不是一个完全的程序员,所以请简单解释一下:)

谢谢

4

1 回答 1

0

在清单中添加此权限。

<uses-permission android:name="android.permission.INTERNET" />

于 2013-04-03T11:50:50.910 回答