2016-02-14 640 views
4

我正在尝试编写一个WebView程序,该程序显示使用麦克风录制音频的网页(使用javascript getUserMedia录制音频)。我已经实现了下面的代码,并且我弹出询问用户的许可,并且在我允许之后,授予函数被调用(并且我认为我可以访问麦克风),但是录制只是空的。如果我在浏览器上尝试相同的网站,那么它就可以工作。我正在测试this website。任何帮助,将不胜感激。在Android中使用WebView访问麦克风

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 


       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 
       myCallback.invoke(myOrigin, true, false); 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
       Log.d("WebView", "PERMISSION NOT GRANTED"); 
      } 
      return; 
     } case MY_PERMISSIONS_REQUEST_RECORD_AUDIO: { 
      Log.d("WebView", "PERMISSION FOR AUDIO"); 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 


       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 
       myRequest.grant(myRequest.getResources()); 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

,在我ChromeClient我:

@Override 
    public void onPermissionRequest(final PermissionRequest request) { 
     myRequest = request; 

     for(String permission : request.getResources()) { 
      switch(permission) { 
       case "android.webkit.resource.AUDIO_CAPTURE": { 
        askForPermission(request.getOrigin().toString(), Manifest.permission.RECORD_AUDIO, MY_PERMISSIONS_REQUEST_RECORD_AUDIO); 
        break; 
       } 
      } 
     } 
    } 

public void askForPermission(String origin, String permission, int requestCode) { 
     Log.d("WebView", "inside askForPermission for" + origin + "with" + permission); 

     if (ContextCompat.checkSelfPermission(getApplicationContext(), 
       permission) 
       != PackageManager.PERMISSION_GRANTED) { 

      // Should we show an explanation? 
      if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
        permission)) { 

       // Show an expanation to the user *asynchronously* -- don't block 
       // this thread waiting for the user's response! After the user 
       // sees the explanation, try again to request the permission. 

      } else { 

       // No explanation needed, we can request the permission. 

       ActivityCompat.requestPermissions(thisActivity, 
         new String[]{permission}, 
         requestCode); 
      } 
     } else { 
      myRequest.grant(myRequest.getResources()); 
     } 
    } 
+0

<使用许可权的android:NAME = “android.permission.RECORD_AUDIO”/> <使用许可权的android:NAME = “android.permission.MODIFY_AUDIO_SETTINGS”/> – pablopatarca

回答

1

这竟然是与权限的问题。以下两个需要包含在清单文件中。

在清单中添加这两种权限
+3

需要哪些权限才能添加到清单中以从WebVIew捕获音频,视频工作正常,但我无法捕获音频。 –