Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Android Studio中的WebView应用程序_Javascript_Java_Android - Fatal编程技术网

Javascript Android Studio中的WebView应用程序

Javascript Android Studio中的WebView应用程序,javascript,java,android,Javascript,Java,Android,我已经使用Android studio将我的完全响应的网站转换为Android应用程序。我还添加了一个信号推送通知。我有两个问题 通知工作正常,但我希望在单击时在单独的窗口中打开通知。代码应该是什么?我应该把它们放在哪里 我希望在我的webview应用程序(android studio)中有一个页面加载进度条。代码应该是什么,应该放在哪里 我的代码如下 在mainactivity.java页面 package com.example.rijvan.awebaddress; import...

我已经使用Android studio将我的完全响应的网站转换为Android应用程序。我还添加了一个信号推送通知。我有两个问题

  • 通知工作正常,但我希望在单击时在单独的窗口中打开通知。代码应该是什么?我应该把它们放在哪里

  • 我希望在我的webview应用程序(android studio)中有一个页面加载进度条。代码应该是什么,应该放在哪里

  • 我的代码如下

    在mainactivity.java页面

    package com.example.rijvan.awebaddress;
    
    import...
    
    public class MainActivity extends AppCompatActivity {
    public WebView mywebView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        OneSignal.startInit(this)
    
        .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
                .unsubscribeWhenNotificationsAreDisabled(true)
                .init();
    
    
        setContentView(R.layout.activity_main);
        mywebView=(WebView)findViewById(R.id.webview);
        WebSettings webSettings=mywebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        mywebView.loadUrl("https://my web site/");
        mywebView.setWebViewClient(new WebViewClient());
    }
    
    @Override
    public void onBackPressed() {
    
        if (mywebView.canGoBack()){
          mywebView.goBack();
        }else{
            super.onBackPressed();
        }
      }
    }
    
    在activity_main.xml上

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout   
     xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:layout_editor_absoluteY="81dp">
    
    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp" />
    </android.support.constraint.ConstraintLayout>
    
    
    
    在AndroidManifest.xml上

      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="com.example.rijvan.awebaddress">
    
    <uses-permission android:name="android.permission.INTERNET" />
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
     </application>
    </manifest>
    
    
    

    我对安卓真的很陌生。任何帮助都将不胜感激。

    请尝试此代码,它将帮助您加载webview

    webView = (WebView) findViewById(R.id.webView);
    
            WebSettings webSettings = webView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webView.setWebViewClient(new WebViewClient());
    
            webView.getSettings().setDomStorageEnabled(true);
            final ProgressDialog pd = ProgressDialog.show(TestView.this, "", "Loading...", true);
            webView = (WebView) findViewById(R.id.webView);
            webView.getSettings().setJavaScriptEnabled(true);
    
            webView.loadUrl("http://www.diamondflorist.com/");
            webView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon)
                {
                    pd.show();
                }
                @Override
                public void onPageFinished(WebView view, String url) {
                    pd.dismiss();
                }
            });
    
    对于通知,您需要创建一个新的活动或对话框(无论您想要什么),并通过如下方式单击通知打开它

    NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(icon, message, when);
    
        Intent notificationIntent = new Intent(context, HomeActivity.class);
    
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
        PendingIntent intent = PendingIntent.getActivity(context, 0,
                notificationIntent, 0);
    
        notification.setLatestEventInfo(context, title, message, intent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notificationManager.notify(0, notification);
    
    希望这对你有帮助

    找到下面的答案:

    1。我希望在我的webview应用程序(android studio)中有一个页面加载进度条。代码应该是什么,应该放在哪里? 试试这些代码就行了-

    package com.example.rijvan.awebaddress;
    
    import android.annotation.SuppressLint;
    import android.os.Build;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.view.KeyEvent;
    import android.view.View;
    import android.webkit.WebChromeClient;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.ProgressBar;
    
    
    public class MainActivity extends AppCompatActivity {
        private WebView webView;
        private ProgressBar progressBar;
        @SuppressLint("HandlerLeak")
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message message) {
                switch (message.what) {
                    case 1: {
                        webViewGoBack();
                    }
                    break;
                }
            }
        };
    
    
        @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.progress_bar);
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
            } else {
                webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            }
            WebSettings webSettings = webView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webView.setWebChromeClient(new WebChromeClient() {
                public void onProgressChanged(WebView view, int progress) {
                    // TODO: 5/28/2018 set your loader progress here
                }
    
            });
            webView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    progressBar.setVisibility(View.VISIBLE);
                    return true;
                }
    
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    progressBar.setVisibility(View.GONE);
                }
            });
            webView.loadUrl("https://my web site/");
            progressBar.setVisibility(View.VISIBLE);
            webView.setOnKeyListener(new View.OnKeyListener() {
    
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
                        handler.sendEmptyMessage(1);
                        return true;
                    }
                    return false;
                }
    
            });
        }
    
        private void webViewGoBack() {
            webView.goBack();
        }
    
    }
    
    2。通知工作正常,但我希望在单击时在单独的窗口中打开通知。代码应该是什么,应该放在哪里?

    您可以通过在一个信号通知中传递url来实现- 1.在通知中发送要在通知单击时打开的页面url

  • 在通知意图中传递该url,例如:

    NotificationManager NotificationManager=(NotificationManager)上下文 .getSystemService(上下文通知服务); 通知通知=新通知(图标、消息、时间)

  • 在MainActivity中,从intent获取页面url,并将该url加载到webview.ex中-

    if(null!=getIntent()&&null!=getIntent().getExtras()){ Bundle Bundle=getIntent().getExtras(); 字符串url=bundle.getString(url); loadWebview(url);
    }


  • 非常感谢您的回复。我是一个绝对的初学者,所以我想再问你一次,关于第二个问题,你描述的关于加载URL的问题。但是我不想打开任何网页,我希望当我的用户点击通知时,按摩的内容会显示在新的屏幕、对话框或窗口中,而不是在我点击时打开应用程序。是的。。如果你想要一个新页面,你可以通过创建一个新的活动来完成它,或者点击点击通知后你也可以在同一个屏幕上打开弹出窗口。PLS对它进行评分,如果你得到了我的答案,否则我会发送一些代码,如果你需要的话,我会给你评级,无论如何,你应得的,但是如果你能发送一些有帮助的代码。
    Intent notificationIntent = new Intent(context, MainActivity.class);
    notifcationIntent.putString(URL, pageUrl);
    
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
    PendingIntent intent = PendingIntent.getActivity(context, 0,
            notificationIntent, 0);
    
    notification.setLatestEventInfo(context, title, message, intent);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(0, notification);