Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
3mang_android_webrtc_test
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
胡斌
2019-01-17 11:32:39 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
31dae9b3d760720aeb016e27baddb9ea1d788985
31dae9b3
1 parent
39da323e
use firefox geckoview
隐藏空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
135 行增加
和
68 行删除
app/build.gradle
app/src/main/AndroidManifest.xml
app/src/main/java/com/xuedianyun/cloudclass/MainActivity.java
app/src/main/res/layout/activity_main.xml
build.gradle
app/build.gradle
查看文件 @
31dae9b
...
...
@@ -21,17 +21,30 @@ android {
targetCompatibility
1.8
sourceCompatibility
1.8
}
flavorDimensions
"abi"
productFlavors
{
arm
{
dimension
"abi"
}
// aarch64 { dimension "abi" }
}
}
ext
{
geckoviewChannel
=
"nightly"
// geckoviewVersion = "64.0.20180927100037"
// geckoviewVersion = "66.0.20181231091417"
geckoviewVersion
=
"66.0.20190116093310"
}
dependencies
{
implementation
fileTree
(
dir:
'libs'
,
include:
[
'*.jar'
])
implementation
'com.android.support:appcompat-v7:26.1.0'
implementation
'com.android.support:design:26.1.0'
implementation
'com.android.support.constraint:constraint-layout:1.0.2'
implementation
'com.android.support:support-vector-drawable:26.1.0'
implementation
'org.webrtc:google-webrtc:1.0.+'
implementation
'com.android.support:appcompat-v7:27.1.1'
implementation
'com.android.support:design:27.1.0'
implementation
'com.android.support.constraint:constraint-layout:1.1.3'
implementation
'com.android.support:support-vector-drawable:27.1.0'
// testImplementation 'junit:junit:4.12'
// androidTestImplementation 'com.android.support.test:runner:1.0.1'
// androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
armImplementation
"org.mozilla.geckoview:geckoview-${geckoviewChannel}-armeabi-v7a:${geckoviewVersion}"
}
...
...
app/src/main/AndroidManifest.xml
查看文件 @
31dae9b
...
...
@@ -18,6 +18,10 @@
</intent-filter>
</activity>
</application>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_COARSE_LOCATION"
/>
<uses-permission
android:name=
"android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission
android:name =
"android.permission.RECORD_AUDIO"
/>
<uses-permission
android:name =
"android.permission.MODIFY_AUDIO_SETTINGS"
/>
<uses-permission
android:name=
"android.permission.CAMERA"
/>
...
...
app/src/main/java/com/xuedianyun/cloudclass/MainActivity.java
查看文件 @
31dae9b
...
...
@@ -7,6 +7,7 @@ import android.content.pm.PackageManager;
import
android.net.Uri
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.os.SystemClock
;
import
android.support.annotation.NonNull
;
import
android.support.design.widget.BottomNavigationView
;
import
android.support.v4.app.ActivityCompat
;
...
...
@@ -15,22 +16,24 @@ import android.support.v7.app.AppCompatActivity;
import
android.util.Log
;
import
android.view.MenuItem
;
import
android.view.View
;
import
android.webkit.ConsoleMessage
;
import
android.webkit.PermissionRequest
;
import
android.webkit.WebChromeClient
;
import
android.webkit.WebSettings
;
import
android.webkit.WebView
;
import
android.webkit.WebViewClient
;
import
org.mozilla.geckoview.GeckoRuntime
;
import
org.mozilla.geckoview.GeckoSession
;
import
org.mozilla.geckoview.GeckoView
;
import
com.xuedianyun.cloudclass.R
;
import
java.util.Locale
;
public
class
MainActivity
extends
AppCompatActivity
{
private
static
final
int
CAMERA_REQUEST
=
1888
;
private
WebView
mWebView
;
private
GeckoView
mWebView
;
private
GeckoSession
mSession
;
//private String mCustomURL = "https://pclive.xuedianyun.com/pcBase/agora/";
private
String
mCustomURL
=
"https://webrtc.github.io/samples/src/content/devices/input-output/"
;
private
String
mWebrtcURL
=
"https://janus.conf.meetecho.com/videoroomtest.html"
;
private
String
mUrl
;
private
static
final
int
REQUEST_PERMISSIONS
=
2
;
private
BottomNavigationView
.
OnNavigationItemSelectedListener
mOnNavigationItemSelectedListener
=
new
BottomNavigationView
.
OnNavigationItemSelectedListener
()
{
...
...
@@ -39,16 +42,18 @@ public class MainActivity extends AppCompatActivity {
public
boolean
onNavigationItemSelected
(
@NonNull
MenuItem
item
)
{
switch
(
item
.
getItemId
())
{
case
R
.
id
.
navigation_custom
:
mWebView
.
loadUrl
(
mCustomURL
);
mUrl
=
mCustomURL
;
mSession
.
loadUri
(
mUrl
);
return
true
;
case
R
.
id
.
navigation_webrtc
:
mWebView
.
loadUrl
(
mWebrtcURL
);
mUrl
=
mWebrtcURL
;
mSession
.
loadUri
(
mUrl
);
return
true
;
case
R
.
id
.
navigation_refresh
:
m
WebView
.
reload
();
m
Session
.
reload
();
return
true
;
case
R
.
id
.
navigation_open
:
openBrowserWithURL
(
m
WebView
.
getUrl
()
);
openBrowserWithURL
(
m
Url
);
return
true
;
}
return
false
;
...
...
@@ -84,6 +89,12 @@ public class MainActivity extends AppCompatActivity {
return
;
}
case
REQUEST_PERMISSIONS:
{
final
ExamplePermissionDelegate
permission
=
(
ExamplePermissionDelegate
)
mSession
.
getPermissionDelegate
();
permission
.
onRequestPermissionsResult
(
permissions
,
grantResults
);
return
;
}
// other 'case' lines to check for other
// permissions this app might request
...
...
@@ -92,40 +103,17 @@ public class MainActivity extends AppCompatActivity {
private
void
createWebView
()
{
mWebView
=
(
WebView
)
findViewById
(
R
.
id
.
webview
);
setUpWebViewDefaults
(
mWebView
);
mWebView
.
loadUrl
(
mCustomURL
);
mWebView
.
setWebChromeClient
(
new
WebChromeClient
()
{
public
boolean
onConsoleMessage
(
ConsoleMessage
m
)
{
Log
.
d
(
"getUserMedia, WebView"
,
m
.
message
()
+
" -- From line "
+
m
.
lineNumber
()
+
" of "
+
m
.
sourceId
());
return
true
;
}
@Override
public
void
onPermissionRequest
(
final
PermissionRequest
request
)
{
// getActivity().
MainActivity
.
this
.
runOnUiThread
(
new
Runnable
()
{
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP
)
@Override
public
void
run
()
{
// Below isn't necessary, however you might want to:
// 1) Check what the site is and perhaps have a blacklist
// 2) Have a pop up for the user to explicitly give permission
//if(request.getOrigin().toString().equals("https://pclive.xuedianyun.com/") ||
// request.getOrigin().toString().equals("https://janus.conf.meetecho.com/")) {
request
.
grant
(
request
.
getResources
());
// } else {
// request.deny();
// }
}
});
}
});
mWebView
=
(
GeckoView
)
findViewById
(
R
.
id
.
webview
);
mSession
=
new
GeckoSession
();
GeckoRuntime
runtime
=
GeckoRuntime
.
create
(
this
);
mSession
.
open
(
runtime
);
mWebView
.
setSession
(
mSession
);
mUrl
=
mCustomURL
;
final
ExamplePermissionDelegate
permission
=
new
ExamplePermissionDelegate
();
permission
.
androidPermissionRequestCode
=
REQUEST_PERMISSIONS
;
mSession
.
setPermissionDelegate
(
permission
);
mSession
.
loadUri
(
mUrl
);
}
private
void
checkForAndAskForPermissions
()
{
...
...
@@ -160,30 +148,89 @@ public class MainActivity extends AppCompatActivity {
}
}
private
void
setUpWebViewDefaults
(
WebView
webView
)
{
WebSettings
settings
=
webView
.
getSettings
();
settings
.
setJavaScriptEnabled
(
true
);
private
class
ExamplePermissionDelegate
implements
GeckoSession
.
PermissionDelegate
{
public
int
androidPermissionRequestCode
=
1
;
private
Callback
mCallback
;
public
void
onRequestPermissionsResult
(
final
String
[]
permissions
,
final
int
[]
grantResults
)
{
if
(
mCallback
==
null
)
{
return
;
}
final
Callback
cb
=
mCallback
;
mCallback
=
null
;
for
(
final
int
result
:
grantResults
)
{
if
(
result
!=
PackageManager
.
PERMISSION_GRANTED
)
{
// At least one permission was not granted.
cb
.
reject
();
return
;
}
}
cb
.
grant
();
}
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
HONEYCOMB
)
{
webView
.
setLayerType
(
View
.
LAYER_TYPE_HARDWARE
,
null
);
@Override
public
void
onAndroidPermissionsRequest
(
final
GeckoSession
session
,
final
String
[]
permissions
,
final
Callback
callback
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
23
)
{
// requestPermissions was introduced in API 23.
mCallback
=
callback
;
requestPermissions
(
permissions
,
androidPermissionRequestCode
);
}
else
{
callback
.
grant
();
}
}
settings
.
setCacheMode
(
WebSettings
.
LOAD_NO_CACHE
);
settings
.
setAllowContentAccess
(
true
);
settings
.
setAllowFileAccessFromFileURLs
(
true
);
settings
.
setAllowUniversalAccessFromFileURLs
(
true
);
settings
.
setJavaScriptCanOpenWindowsAutomatically
(
true
);
settings
.
setMediaPlaybackRequiresUserGesture
(
false
);
@Override
public
void
onContentPermissionRequest
(
final
GeckoSession
session
,
final
String
uri
,
final
int
type
,
final
Callback
callback
)
{
final
int
resId
;
/* if (PERMISSION_GEOLOCATION == type) {
resId = R.string.request_geolocation;
} else if (PERMISSION_DESKTOP_NOTIFICATION == type) {
resId = R.string.request_notification;
} else if (PERMISSION_AUTOPLAY_MEDIA == type) {
resId = R.string.request_autoplay;
} else {
Log.w(LOGTAG, "Unknown permission: " + type);
callback.reject();
return;
}
// Enable remote debugging via chrome://inspect
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
KITKAT
)
{
WebView
.
setWebContentsDebuggingEnabled
(
true
);
final String title = getString(resId, Uri.parse(uri).getAuthority());
final BasicGeckoViewPrompt prompt = (BasicGeckoViewPrompt)
mGeckoSession.getPromptDelegate();
prompt.onPermissionPrompt(session, title, callback);*/
callback
.
grant
();
}
webView
.
clearCache
(
true
);
webView
.
clearHistory
();
webView
.
setWebViewClient
(
new
WebViewClient
());
@Override
public
void
onMediaPermissionRequest
(
final
GeckoSession
session
,
final
String
uri
,
final
MediaSource
[]
video
,
final
MediaSource
[]
audio
,
final
MediaCallback
callback
)
{
/* final String host = Uri.parse(uri).getAuthority();
final String title;
if (audio == null) {
title = getString(R.string.request_video, host);
} else if (video == null) {
title = getString(R.string.request_audio, host);
} else {
title = getString(R.string.request_media, host);
}
String[] videoNames = normalizeMediaName(video);
String[] audioNames = normalizeMediaName(audio);
final BasicGeckoViewPrompt prompt = (BasicGeckoViewPrompt)
mGeckoSession.getPromptDelegate();
prompt.onMediaPrompt(session, title, video, audio, videoNames, audioNames, callback);*/
MediaSource
v
=
video
.
length
>
0
?
video
[
0
]
:
null
;
MediaSource
a
=
video
.
length
>
0
?
audio
[
0
]:
null
;
callback
.
grant
(
v
,
a
);
}
}
private
void
openBrowserWithURL
(
String
url
)
{
...
...
app/src/main/res/layout/activity_main.xml
查看文件 @
31dae9b
...
...
@@ -19,7 +19,7 @@
app:layout_constraintRight_toRightOf=
"parent"
app:menu=
"@menu/navigation"
/>
<
Web
View
<
org.mozilla.geckoview.Gecko
View
android:id=
"@+id/webview"
android:layout_width=
"fill_parent"
android:layout_height=
"fill_parent"
/>
...
...
build.gradle
查看文件 @
31dae9b
...
...
@@ -19,6 +19,9 @@ allprojects {
repositories
{
google
()
jcenter
()
maven
{
url
"https://maven.mozilla.org/maven2/"
}
}
}
...
...
请
注册
或
登录
后发表评论