Mam prostą stronę z przyciskiem, który po naciśnięciu używa Async Clipboard API do pisania w schowku.
<body>
<button type="button" onclick="testClipboard();">
Test Clipboard
</button>
</body>
function testClipboard() {
navigator.clipboard.writeText("Clipboard API Test").then(
v => alert("Success"),
e => alert("Fail\n" + e));
}
Działa to zarówno w Chrome, jak i Firefox, na komputerach i urządzeniach mobilnych. Jednak w Android Webview wyświetla następujący błąd:
NotAllowError: Write permission denied.
Uznałem, że muszę przeskoczyć, WebChromeClient.onPermissionRequest()
aby udzielić pozwolenia, ale dziwnie onPermissionRequest()
nie wydaje się, że został wywołany, a ten sam błąd jest nadal zgłaszany.
public class WebChromeController extends WebChromeClient {
@Override
public void onPermissionRequest(PermissionRequest request) {
Log.d("myTag", "Permission request");
Log.d("myTag", request.getResources().toString());
request.grant(request.getResources());
}
}
protected void initWebView() {
// ...
myWebView.setWebChromeClient(new WebChromeController());
}
Nadal pojawia się ten sam błąd:
NotAllowError: Write permission denied.
Również Logcat nic nie zarejestrował.
Podejrzewałem, że może moja aplikacja na Androida wymaga dodatkowych uprawnień, aby uzyskać dostęp do schowka, ale zgodnie z https://developer.android.com/about/versions/10/privacy/changes#clipboard-data moja aplikacja powinna mieć uprawnienia, gdy jest skupiona . Rzeczywiście działa następujący kod:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("MyLbl", "I have permission");
clipboard.setPrimaryClip(clip);
Oświadczyłem również, że AndroidManifest.xml
w przypadku, gdy działanie w celu uzyskania pozwolenia wymaga pozwolenia:
<uses-permission android:name="android.webkit.PermissionRequest" />
To nic nie zrobiło.
Prawdopodobnie nie jest to problem z uprawnieniami na poziomie aplikacji.
Co się dzieje?
Jak mogę uzyskać wywołania interfejsu API schowka Async do pracy w Widoku sieci?
System operacyjny: Android 10 Q
Webview: v. 81.0.4044.111
onPermissionRequest()
w rzeczywistości nigdy nie został wywołany.