像tripadvisor的对话框和在android中显示自定义背景的启动画面

时间:2013-01-17 14:30:13

标签: java android webview

我是android开发的初学者。下面我给出我的主要activity.java代码。我的要求,如果互联网连接或wifi无法在移动设备上运行,那么执行

  1. 如果互联网连接不起作用,则在应用程序启动时显示我的启动画面,并给出对话框或警告,如行程顾问Check this image and screenshot的此屏幕截图。如果按下取消按钮,则对话框消失,只显示启动画面,如果再次按,则尝试连接到互联网。
  2. 在我的代码中我采取代码购买对话框,我不想购买功能这不是我的要求。我想要旅行顾问。对于我来说,如果有人编辑我的代码并在预先显示改变的地方非常感谢,那么我很容易

    package com.example.edarabia;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    
    
    @SuppressLint("SetJavaScriptEnabled")
    
    public class MainActivity extends Activity{
    WebView mywebview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         mywebview = (WebView) findViewById(R.id.webview);
        if(isNetworkConnected() == true){
        mywebview.getSettings().setJavaScriptEnabled(true);
        mywebview.setWebViewClient(new myWebClient());
            mywebview.loadUrl("http://www.grafdom.com/operations/projects/ma/edarabiaapp/");        
        mywebview.getSettings().setBuiltInZoomControls(true);
        mywebview.getSettings().setLoadWithOverviewMode(false);
        mywebview.getSettings().setUseWideViewPort(false);
        }else{
        showBuyDialog();
        }
    }
    
    
    
    
    
    
    //  @Override
    //    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if the key event was the Back button and if there's history
    //        if ((keyCode == KeyEvent.KEYCODE_BACK) && mywebview.canGoBack()) {
    //          mywebview.goBack();
    //            return true;
     //       }
    
     //       return super.onKeyDown(keyCode, event);
    
    //  }
    
     // To handle "Back" key press event for WebView to go back to previous screen.
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mywebview.canGoBack()) {
            mywebview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    
    @Override
    public void onBackPressed() {
        finish();
    }
    
    
    public class myWebClient extends WebViewClient
    {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }
    
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) { 
            view.loadUrl(url);
            return true;
        }
    }
    
    //// This method will retun boolean value if net conect then value will be true otherwise false
    private boolean isNetworkConnected() {
        ConnectivityManager connectivity = (ConnectivityManager)     getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
                for (int i = 0; i < info.length; i++)
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
        }
        return false;
    }
    
    public void showBuyDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("just for testing");
    
        builder.setMessage("Check you net conectivity....");
        builder.setCancelable(false);
        builder.setPositiveButton("Buy", new DialogInterface.OnClickListener() {
    
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                Intent browserIntent = new Intent(
                        Intent.ACTION_VIEW,
                        Uri.parse("https://www.google.com"));
                startActivity(browserIntent);
            }
        });
        builder.show();
    }
    
    
    
    
    }
    

3 个答案:

答案 0 :(得分:1)

这可能会有所帮助: Detect whether there is an Internet connection available on Android

或尝试深入了解BroadcastReceivers。 示例代码:

public class InternetConnectionStateReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        _v("Network connectivity change");
        if (intent.getExtras() != null) {
            NetworkInfo ni = (NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
            if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
                _v("Network " + ni.getTypeName() + " connected");
                onNetworkConnection(context, true);
            }
        }
        if (intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
            _v("There's no network connectivity");
            onNetworkConnection(context, false);
        }
    }

    private void onNetworkConnection(Context context, boolean isConnected) {
          //show dialog
    }

}

答案 1 :(得分:0)

我得到了解决方案并且在更新后的代码下方

package com.example.edarabia;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;


@SuppressLint("SetJavaScriptEnabled")

public class MainActivity extends Activity{
WebView mywebview;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(isNetworkConnected() == true){
    setContentView(R.layout.activity_main);
    mywebview = (WebView) findViewById(R.id.webview);       
    mywebview.getSettings().setJavaScriptEnabled(true);
    mywebview.setWebViewClient(new myWebClient());
    mywebview.loadUrl("http://www.grafdom.com/operations/projects/ma/edarabiaapp/");        
    mywebview.getSettings().setBuiltInZoomControls(true);
    mywebview.getSettings().setLoadWithOverviewMode(false);
    mywebview.getSettings().setUseWideViewPort(false);
    }else{
    setContentView(R.layout.splash);    
    showBuyDialog();
    }
}






//  @Override
//    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if the key event was the Back button and if there's history
//        if ((keyCode == KeyEvent.KEYCODE_BACK) && mywebview.canGoBack()) {
//          mywebview.goBack();
//            return true;
 //       }

 //       return super.onKeyDown(keyCode, event);

//  }

 // To handle "Back" key press event for WebView to go back to previous screen.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mywebview.canGoBack()) {
        mywebview.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    finish();
}


public class myWebClient extends WebViewClient
{
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl(url);
        return true;
    }
}

//// This method will retun boolean value if net conect then value will be true otherwise false
private boolean isNetworkConnected() {
    ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity != null) {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null)
            for (int i = 0; i < info.length; i++)
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }
    }
    return false;
}

public void showBuyDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle("Unable to connect");

    builder.setMessage("You Must have an Internet connection to use Edarabia. Please connect and try again.");
    builder.setCancelable(false);
    builder.setNegativeButton("Close", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            finish(); 
        }
    });
    builder.show();
}




}

答案 2 :(得分:0)

尝试替换showButDialog()方法,

public void showBuyDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle("Unable to connect");   
    builder.setMessage("You must have an Internet connection to use TripAdvisor. Please connect and try again.");
    builder.setCancelable(false);

    builder.setPositiveButton("Try again", new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int id) {
               isNetworkConnected();
         }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    builder.show();
}

要获得与图片中相同的用户界面,请在application标记之前添加以下行,就像这样,

<uses-sdk android:targetSdkVersion="15" />

此类对话框可从Android OS 3.0(Honey Comb)及以上版本获得。因此,您无法在以前的版本中看到对话框。