在 WebView Android 中键入时播放声音

Posted

技术标签:

【中文标题】在 WebView Android 中键入时播放声音【英文标题】:Play Sound When Typing in WebView Android 【发布时间】:2021-12-22 10:18:51 【问题描述】:

目前我还在学习android开发的过程中,如果我的这个问题不是很容易理解,请见谅。

我创建了一个使用 WebView 的 Android 应用,我想知道如何在我的应用中输入 WebView 时启用声音。

到目前为止,我只能在单击 WebView 中的网站链接时启用声音。

任何帮助将不胜感激。

这是我的 WebView 代码。

public class WebViewActivity extends AppCompatActivity 

    private WebView webView;
    String url = "www.google.com";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
    
        webView = findViewById(R.id.webView);
    
        WebSettings webSettings = webView.getSettings();
    
        websettings.setDomStorageEnabled(true);
        websettings.setjavascriptEnabled(true);
        webView.getSettings().setAppCachePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/cache");
        webView.getSettings().setDatabasePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/databases");
    
        if (Build.VERSION.SDK_INT >= 21) 
            CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
         else 
            CookieManager.getInstance().setAcceptCookie(true);
        
    
        webView.loadUrl(url);
    
        webView.setWebViewClient(new WebViewClient()
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) 
                soundOn();
                view.loadUrl(url);
                return true;
            @Override
            public void onPageFinished(WebView view, String url) 
                super.onPageFinished(view, url);
            
        
        ...
    

    ...

    private void soundOn() 
        SoundPool sp = new SoundPool.Builder()
                .setMaxStreams(5)
                .build();

        sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() 
            @Override
            public void onLoadComplete(SoundPool soundPool, int i, int i1) 
                soundPool.play(i, 1f, 1f, 0, 0, 1);
            
        );

        sp.load(getApplicationContext(), R.raw.mysound, 1);
    

【问题讨论】:

【参考方案1】:

1-您首先从 Web 视图创建一个自定义类,如下所示:

public class CustomWebView extends WebView 


public CustomWebView(Context context, AttributeSet attrs) 
    super(context, attrs);


@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) 
    return new BaseInputConnection(this, false); //this is needed for #dispatchKeyEvent() to be notified.


@Override
public boolean dispatchKeyEvent(KeyEvent event) 
    //return super.dispatchKeyEvent(event);

    boolean dispatchFirst = super.dispatchKeyEvent(event);
    // Listening here for whatever key events you need
    if (event.getAction() == KeyEvent.ACTION_UP)
        switch (event.getKeyCode()) 
            case KeyEvent.KEYCODE_SPACE:
                soundOn();
                break;
            case KeyEvent.KEYCODE_ENTER:
                // e.g. get enter events here
                break;
            // case other keys

        
    return dispatchFirst;

2-然后去布局并替换你的 WebView 类:

            <com...CustomWebView
            android:id="@+id/webView"
            android:layout_
            android:layout_

            />

【讨论】:

谢谢你,尼玛。效果很好。 谢谢你,最好的 Nima,当我单击 WebView 中的链接时,发出声音的正确方法是什么?现在我正在使用 shouldoverrideurlloading 来发出声音。但问题是有时当我点击一个网站链接时,我会听到 2 次点击声。 你登录这个方法,看看这个方法执行了多少次。对于某些链接,它可能会重复两次。您可以使用处理程序之类的方法来执行此操作。暂停几秒钟 尼玛,你介意分享一下方法吗?我不知道如何应用它。我已经给你发了一封电子邮件。

以上是关于在 WebView Android 中键入时播放声音的主要内容,如果未能解决你的问题,请参考以下文章

Android:AudioTrack 在开始时会发出咔哒声

如何解决在android开发中WebView在线播放视频黑屏啊?

YouTube 视频在 WebView Android 中仅在屏幕旋转时播放音频

如何在android webview中播放视频URL

在 html iframe 内的 Android webview 上播放音频时出错

HTML5在android WebView中没有视频只有音频播放