是否可以保留来自WebView的音频,特别是在后台运行于android的嵌入式Webtorrent客户端(播放视频)?我看到了与此矛盾的答案,并且很好奇你们对这个话题的了解。我已经在android studio中看到了一些确定的答案,但是对于Xamarin却没有。
有人告诉我,WebView被认为是UI元素。因此,这使得无法在后台运行视频/音频。因此,如果是这样,您是否认为通过一些巧妙的编码,我可以重写android操作系统,以使其认为WebView仍然处于前台?
我知道可以使用MediaPlayer保持音频运行,例如,说您正在播放MP3。因此,另一种可能是使用服务来保持音频焦点。但是然后,视频会停止播放吗(因为这不能解决WebView作为UI元素的问题)?
另一种可能性是将整个应用程序移植到服务中。.但是我不确定是否可行。如果我得到的答案是正确的,那么我将努力实现它。
我不是在找你们做编码;我只是在寻找有关哪种方法(如有)/可行/最有效的指南。
这是我当前用来构建WebView的一些示例代码(不确定是否重要)
//what's on
[Activity]
//this class should be an aggregate subscription feed
public class WhatsOnActivity : Activity
{
public override void OnBackPressed()
{
WebView whatsOnWebView = FindViewById<WebView>(Resource.Id.webViewWhatsOn);
whatsOnWebView.GoBack();
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.whatsOn);
//declare webview and tell our code where to find the XAML resource
WebView whatsOnWebView = FindViewById<WebView>(Resource.Id.webViewWhatsOn);
whatsOnWebView.SetBackgroundColor(Android.Graphics.Color.Green);
//set the webview client
whatsOnWebView.SetWebViewClient(new WebViewClient());
//load the 'whats on' url, will need webscript for curated subscribed feed
whatsOnWebView.LoadUrl("https://www.bitchute.com/#listing-subscribed");
//enable javascript in our webview
whatsOnWebView.Settings.JavaScriptEnabled = true;
//zoom control on? This should perhaps be disabled for consistency?
//we will leave it on for now
whatsOnWebView.Settings.BuiltInZoomControls = true;
whatsOnWebView.Settings.SetSupportZoom(true);
//scrollbarsdisabled
// subWebView.ScrollBarStyle = ScrollbarStyles.OutsideOverlay;
whatsOnWebView.ScrollbarFadingEnabled = false;
}
}
编辑:另外,我的开源项目可以在这里找到 https://github.com/hexag0d/bitchute_mobile_android_a2
谢谢。 =]
答案 0 :(得分:0)
我觉得现在回答这个问题已经很晚了,但我正在做的项目与这个类似。 我目前正在通过前台服务调用带有 WebView 的 Activity 来处理这个项目。
这是在Service中使用Webview调用Activity的代码。
将其放入服务的 onStartCommand()
。
Context context = getApplicationContext();
Intent dialogIntent = new Intent(context, WebViewActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);