Basıldığında, panoya yazmak için Async Clipboard API'sini kullanan bir düğmeyle basit bir sayfam var.
<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));
}
Bu, hem Chrome hem de Firefox, masaüstü ve mobil cihazlarda çalışır. Ancak Android Webview'da aşağıdaki hatayı atar:
NotAllowError: Write permission denied.
WebChromeClient.onPermissionRequest()
İzin vermek için geçersiz kılmam gerektiğini düşündüm , ancak garip bir onPermissionRequest()
şekilde çağrılmış gibi görünmüyor ve aynı hata hala atılıyor.
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());
}
Ben hala aynı hatayı alıyorum:
NotAllowError: Write permission denied.
Ayrıca Logcat hiçbir şey kaydetmedi.
Android Uygulamamın panoya erişmek için ek izinler gerektirdiğinden şüpheliyim, ancak https://developer.android.com/about/versions/10/privacy/changes#clipboard-data'ya göre , Uygulamam odaklandığında izin almalıdır . Aslında, aşağıdaki kod çalışır:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("MyLbl", "I have permission");
clipboard.setPrimaryClip(clip);
AndroidManifest.xml
İzin isteme eyleminin izin gerektirmesi durumunda aşağıdakileri de beyan ettim :
<uses-permission android:name="android.webkit.PermissionRequest" />
Bu hiçbir şey yapmadı.
Bu nedenle, muhtemelen Uygulama düzeyi izniyle ilgili bir sorun değildir.
Ne oluyor?
Async Clipboard API çağrılarının Web görünümünde çalışmasını nasıl sağlayabilirim?
İşletim Sistemi: Android 10 Q
Web görünümü: s. 81.0.4044.111
onPermissionRequest()
aslında hiçbir zaman çağrılmadı.