2012-07-17 2 views
2

Я относительно новичок в разработке Android, и я пытаюсь создать WebView, который позволит мне запустить приложение для Android-камеры. Как я могу обратиться к методу в основном классе с помощью моего JavaScriptInterface?Android - метод вызова из основного класса в JavaScriptInterface

Спасибо.

public class MainActivity extends Activity { 

    public static final int MEDIA_TYPE_IMAGE = 1888; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 



     WebView mainWebView = (WebView) findViewById(R.id.mainWebView); 
     mainWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 
     WebSettings webSettings = mainWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

     mainWebView.setWebViewClient(new MyCustomWebViewClient()); 
     //mainWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 

     mainWebView.loadUrl("file:///mnt/sdcard/page.html"); 
    } 

    private class MyCustomWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 



    public void takePicture() { 
     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, MEDIA_TYPE_IMAGE); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == MEDIA_TYPE_IMAGE) { 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 


      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      photo.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      byte[] byteArray = stream.toByteArray(); 
      }} 

    } 



package com.cargowise.view; 

import android.content.Context; 
import android.os.Handler; 
import android.widget.Toast; 

public class JavaScriptInterface { 



    Context mContext; 

    /** Instantiate the interface and set the context */ 
    JavaScriptInterface(Context c) { 
     mContext = c; 
    } 


    public void takePic() { 
     MainActivity.takePicture(); 
    } 


    public void showToast(String toast) { 
     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
    } 

ответ

2

Вы сохранили контекст, который вы должны быть в состоянии использовать, чтобы получить доступ к MainActivity.

Изменить это:

public void takePic() { 
    MainActivity.takePicture(); 
} 

Для этого:

public void takePic() { 
    ((MainActivity)mContext).takePicture(); 
} 

Примечание: Вы можете добавить проверку типов или ограничить тип контекста, который дается в MainActivity для обеспечения правильное поведение.

+0

Спасибо, что сработало отлично! –

+0

круто, мне очень помогли. Благодарю. – orcaman

Смежные вопросы