मेरे पास एक बटन के साथ एक सरल पृष्ठ है, जिसे दबाए जाने पर क्लिपबोर्ड पर लिखने के लिए Async क्लिपबोर्ड API का उपयोग करता है।
<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));
}
यह क्रोम और फ़ायरफ़ॉक्स, डेस्कटॉप और मोबाइल दोनों पर काम करता है। हालाँकि Android वेबव्यू पर यह निम्न त्रुटि देता है:
NotAllowError: Write permission denied.
मुझे लगा कि मुझे WebChromeClient.onPermissionRequest()
अनुमति देने के लिए ओवरराइड करने की आवश्यकता है , लेकिन अजीब onPermissionRequest()
नहीं लगता है कि इसे लागू किया गया है, और एक ही त्रुटि अभी भी फेंक दी गई है।
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());
}
मुझे अब भी वही त्रुटि मिलती है:
NotAllowError: Write permission denied.
इसके अलावा Logcat कुछ भी नहीं लॉग किया।
मुझे संदेह है कि शायद मेरे एंड्रॉइड ऐप को क्लिपबोर्ड तक पहुंचने के लिए अतिरिक्त अनुमतियों की आवश्यकता है, लेकिन https://developer.android.com/about/versions/10/privacy/changes#clipboard-data के अनुसार , मेरे ऐप के पास फ़ोकस होने की अनुमति होनी चाहिए । वास्तव में, निम्नलिखित कोड काम करता है:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("MyLbl", "I have permission");
clipboard.setPrimaryClip(clip);
AndroidManifest.xml
अनुमति के अनुरोध की कार्रवाई के मामले में मैंने भी निम्नलिखित की घोषणा की है :
<uses-permission android:name="android.webkit.PermissionRequest" />
इसने कुछ नहीं किया।
तो यह शायद ऐप स्तर की अनुमति के साथ एक मुद्दा नहीं है।
क्या हो रहा है?
वेबव्यू में काम करने के लिए मैं Async क्लिपबोर्ड API कॉल कैसे प्राप्त कर सकता हूं?
OS: Android 10 Q
वेबव्यू: v। 81.0.4044.111
onPermissionRequest()
वास्तव में कभी भी आह्वान नहीं किया गया है।