代码之家  ›  专栏  ›  技术社区  ›  Hrishikesh Kokate

Android应用程序中的EULA对话框

  •  1
  • Hrishikesh Kokate  · 技术社区  · 6 年前

    这是我的MainActivity.java,我想在其中显示EULA:

    package com.application;
    
    import android.annotation.SuppressLint;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.preference.PreferenceManager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.webkit.WebChromeClient;
    import android.widget.LinearLayout;
    import android.widget.ProgressBar;
    import android.widget.Toast;
    
    @SuppressWarnings("deprecation")
    
    public class MainActivity extends AppCompatActivity
    {
        final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        boolean agreed = sharedPreferences.getBoolean("agreed",false);
    
        if(!agreed)
        {
            new AlertDialog.Builder(this, R.style.AlertDialog)
                    .setIcon(R.drawable.ic_assignment_late_black_24dp)
                    .setTitle(R.string.eula_title)
                    .setMessage(R.string.eula)
                    .setPositiveButton(R.string.accept, new DialogInterface.OnClickListener()
                            {
                                @Override
                                public void onClick(DialogInterface dialog, int which)
                                {
                                    SharedPreferences.Editor editor = sharedPreferences.edit();
                                    editor.putBoolean("agreed", true);
                                    editor.apply();
                                }
                            })
                    .setNegativeButton(R.string.decline, new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            finish();
                        }
                    })
                    .show();
        }
    
        private WebView WebView;
        private ProgressBar ProgressBar;
        private LinearLayout LinearLayout;
        private String currentURL;
    
        @SuppressLint("SetJavaScriptEnabled")
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            WebView = findViewById(R.id.webView);
            ProgressBar = findViewById(R.id.progressBar);
            LinearLayout = findViewById(R.id.layout);
    
            ProgressBar.setMax(100);
    
            WebView.loadUrl("https://www.domain.tld/index.html");
            WebView.getSettings().setJavaScriptEnabled(true);
            WebView.getSettings().setUserAgentString("customUA");
            WebView.setWebViewClient(new WebViewClient()
            {
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon)
                {
                    LinearLayout.setVisibility(View.VISIBLE);
                    super.onPageStarted(view, url, favicon);
                }
    
                @Override
                public void onPageFinished(WebView view, String url)
                {
                    LinearLayout.setVisibility(View.GONE);
                    super.onPageFinished(view, url);
                    currentURL = url;
                }
    
                @Override
                public void onReceivedError(WebView webview, int i, String s, String s1)
                {
                    WebView.setVisibility(View.GONE);
    
                    Intent intent = new Intent(MainActivity.this, ErrorActivity.class);
                    startActivity(intent);
                    finish();
                }
    
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url2)
                {
                    if (url2.contains("www.domain.tld"))
                    {
                        view.loadUrl(url2);
                        return false;
                    } else
                    {
                        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url2));
                        startActivity(intent);
                        return true;
                    }
                }
    
            });
    
            WebView.setWebChromeClient(new WebChromeClient()
            {
                @Override
                public void onProgressChanged(WebView view, int newProgress)
                {
                    super.onProgressChanged(view, newProgress);
                    ProgressBar.setProgress(newProgress);
                }
            });
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
            super.onPrepareOptionsMenu(menu);
            MenuInflater menuInflater = getMenuInflater();
            menuInflater.inflate(R.menu.menu, menu);
            return super.onCreateOptionsMenu(menu);
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item)
        {
            switch (item.getItemId())
            {
                case R.id.backward:
                    onBackPressed();
                    break;
    
                case R.id.forward:
                    onForwardPressed();
                    break;
    
                case R.id.refresh:
                    WebView.reload();
                    break;
    
                case R.id.share:
                    Intent shareIntent = new Intent(Intent.ACTION_SEND);
                    shareIntent.setType("text/plain");
                    shareIntent.putExtra(Intent.EXTRA_TEXT,currentURL);
                    startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.shareWith)));
                    break;
    
                case R.id.update:
                    Intent intent = new Intent(MainActivity.this, UpdateActivity.class);
                    startActivity(intent);
                    finish();
                    break;
    
                case R.id.exit:
                    new AlertDialog.Builder(this,R.style.AlertDialog)
                            .setIcon(R.drawable.ic_error_black_24dp)
                            .setTitle(R.string.title)
                            .setMessage(R.string.message)
                            .setPositiveButton(R.string.yes,
                                    new DialogInterface.OnClickListener()
                                    {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which)
                                        {
                                            finish();
                                        }
                                    })
                            .setNegativeButton(R.string.no, null)
                            .show();
                    break;
            }
            return super.onOptionsItemSelected(item);
        }
    
        private void onForwardPressed()
        {
            if (WebView.canGoForward())
            {
                WebView.goForward();
            } else
            {
                Toast.makeText(this, R.string.noFurther, Toast.LENGTH_SHORT).show();
            }
        }
    
        @Override
        public void onBackPressed ()
        {
            if (WebView.canGoBack())
            {
                WebView.goBack();
            } else
            {
                new AlertDialog.Builder(this,R.style.AlertDialog)
                        .setIcon(R.drawable.ic_error_black_24dp)
                        .setTitle(R.string.title)
                        .setMessage(R.string.message)
                        .setPositiveButton(R.string.yes,
                                new DialogInterface.OnClickListener()
                                {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which)
                                    {
                                        finish();
                                    }
                                })
                        .setNegativeButton(R.string.no, null)
                        .show();
            }
        }
    }
    

    问题是,Android studio正在标记 if(!agreed) 作为一个意外的象征。我该怎么解决?

    另外,这种方法是否正确,以实现我在开头所解释的?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Sergey Emeliyanov    6 年前

    您的问题是由错误的Java语法引起的。 ,它不会编译!

    为了让它工作,你可以把你的代码( if(!agreed) {...} )放入花括号 {if(!agreed){...}} 这段代码将正确编译,但在您的情况下,您仍然可能有问题。。

    ,运行初始化代码的标准方法是在 onCreate() Activity 是创建的。

        2
  •  2
  •   Abhinandan    6 年前

    把你的(!同意)onCreate方法内部的块,如在Java中,这个代码片段在类its中不允许显示错误

    if(!agreed)
        {
            new AlertDialog.Builder(this, R.style.AlertDialog)
                    .setIcon(R.drawable.ic_error_black_24dp)
                    .setTitle(R.string.eula_title)
                    .setMessage(R.string.eula)
                    .setPositiveButton(R.string.accept, new DialogInterface.OnClickListener()
                            {
                                @Override
                                public void onClick(DialogInterface dialog, int which)
                                {
                                    SharedPreferences.Editor editor = sharedPreferences.edit();
                                    editor.putBoolean("agreed", true);
                                    editor.apply();
                                }
                            })
                    .setNegativeButton(R.string.decline, new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            finish();
                        }
                    })
                    .show();
        }
        3
  •  2
  •   Martin Zeitler    6 年前

    不能在那里添加代码,这是非法的(至少,没有声明它的作用域)。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_main);
    
        final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        if(! sharedPreferences.getBoolean("agreed", false)) {
    
            new AlertDialog.Builder(this, R.style.AlertDialog)
                    .setIcon(R.drawable.ic_error_black_24dp)
                    .setTitle(R.string.eula_title)
                    .setMessage(R.string.eula)
                    .setPositiveButton(R.string.accept, new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            SharedPreferences.Editor editor = sharedPreferences.edit();
                            editor.putBoolean("agreed", true);
                            editor.apply();
    
                            dialog.dismiss();
                        }
                    })
                    .setNegativeButton(R.string.decline, new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            finish();
                        }
                    })
                    .show();
        }
    
    ...
    }