2016-02-14 637 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捕獲音頻,視頻工作正常,但我無法捕獲音頻。 –