Eu tenho uma página simples com um botão que, quando pressionada, usa a API do Async Clipboard para gravar na área de transferência.
<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));
}
Isso funciona no Chrome e Firefox, desktop e móvel. No entanto, no Android Webview, ele lança o seguinte erro:
NotAllowError: Write permission denied.
Achei que precisava substituir WebChromeClient.onPermissionRequest()
para conceder a permissão, mas estranhamente onPermissionRequest()
não parece ter sido invocado e o mesmo erro ainda é gerado.
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());
}
Ainda obtenho o mesmo erro:
NotAllowError: Write permission denied.
O Logcat também não registrou nada.
Suspeitei que talvez meu aplicativo Android exija permissões adicionais para acessar a área de transferência, mas, de acordo com https://developer.android.com/about/versions/10/privacy/changes#clipboard-data , meu aplicativo deve ter permissão quando estiver focado . De fato, o seguinte código funciona:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("MyLbl", "I have permission");
clipboard.setPrimaryClip(clip);
Também declarei o seguinte AndroidManifest.xml
caso a ação de solicitar permissão exija permissão:
<uses-permission android:name="android.webkit.PermissionRequest" />
Isso não fez nada.
Portanto, provavelmente não é um problema com a permissão no nível do aplicativo.
O que está acontecendo?
Como faço para que as chamadas da API da área de transferência assíncrona funcionem no Webview?
Sistema operativo: Android 10 Q
Visualização da Web: v. 81.0.4044.111
onPermissionRequest()
na verdade nunca foi invocado.