2011-05-04 19 views
0

我有一個從Javascript呼籲正從手機圖庫中選擇文件路徑信息的是Android方法。現在我想將文件路徑名稱發送給javascript方法,但是如果我從android函數返回文件路徑名稱,那麼它將始終返回最後一個文件路徑信息而不是當前文件路徑(可能是其回調!)或者如果我調用任何javascript 05-04 22:07:50.274:ERROR/Web控制檯(331):的ReferenceError:找不到變量:SetImageFileName的方法來獲取文件的路徑,然後將其調試控制檯上顯示
像後發送的文件信息未定義:1的Android爲Javascript調用問題

這裏是我的代碼我做了什麼......

public class Hello extends Activity { 
/** Called when the activity is first created. */ 
WebView webview;  
private ProgressDialog progressBar;   
private static final int SELECT_PICTURE = 1; 
private static final int PICK_IMAGE = 1; 
private String selectedImagePath; 
private String filemanagerstring; 
private long siteId; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);  

    setContentView(R.layout.main); 

    webview = (WebView) findViewById(R.id.webview); 

    webview.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 
    webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    webview.setWebViewClient(new HelloWebViewClient()); 
    WebSettings webSettings = webview.getSettings(); 

    webSettings.setSavePassword(false); 
    webSettings.setSaveFormData(false); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setSupportZoom(false); 
    webview.loadUrl(getString(R.string.ApplicationWebURL));    
} 


public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    if (cursor != null) { 
     // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL 
     // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } else 
     return null; 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
      Uri selectedImageUri = data.getData(); 

      String filePath = null; 

      try { 
       // OI FILE Manager 
       filemanagerstring = selectedImageUri.getPath(); 
       // MEDIA GALLERY 

       selectedImagePath = getPath(selectedImageUri); 
       selectedFileName=getFileName(selectedImagePath); 

       if (selectedImagePath != null) { 
        filePath = selectedImagePath; 
       } 
       else if (filemanagerstring != null) { 
        filePath = filemanagerstring; 
       } 
       else { 
        Toast.makeText(getApplicationContext(), "Unknown path", 
        Toast.LENGTH_LONG).show(); 
        Log.e("Bitmap", "Unknown path"); 
       } 

      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), "Internal error", 
       Toast.LENGTH_LONG).show(); 
       Log.e(e.getClass().getName(), e.getMessage(), e); 
      } 

     } 
    } 
} 

final class JavaScriptInterface { 
     Context mContext; 

     JavaScriptInterface(Context c) { 
      mContext = c; 

     } 
     /** Show a toast from the web page */ 
     public String ShowPhoneGallery(long sId) { 

       try {  

        siteId=sId; 

        Intent intent = new Intent(); 
        intent.setType("image/*"); 
        intent.setAction(Intent.ACTION_GET_CONTENT); 
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),PICK_IMAGE);  

       } catch (Exception e) { 
        Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show(); 
        Log.e(e.getClass().getName(), e.getMessage(), e); 
       } 
      //Calling Javascript to return the value  
      webview.loadUrl("javascript:SetImageFileName('"+ selectedImagePath +"')"); 


      return selectedImagePath; 
     } 

    } 


} 

我 那兒人誰可以幫我在這我ssue ...

回答

0

在我看來像你需要把此行

webview.loadUrl("javascript:SetImageFileName('"+ selectedImagePath +"')"); 

在不同的方法,然後從onActivityResult調用一次你的用戶選擇了圖片

+0

我也放在這個代碼到onActivityResult,但同樣的問題。你的意思是寫另一種方法來調用它嗎? – 2011-05-04 15:36:58

+0

用戶有機會選擇一個圖像,這就是爲什麼你看到返回的最後一個圖像,而不是當前一個之前你ShowPhoneGallery函數返回selectedImagePath。你將需要不selectedImagePath返回任何東西,而不是寫一個不同的功能,以將結果返回給JS – Martyn 2011-05-04 15:40:21

+0

我加ShowPhoneGallery ...公共字符串GetFilePath(){ \t \t回selectedImagePath下的另一種方法; \t} – 2011-05-04 15:57:25