2011-11-16 8 views
1

HTML5とJavaScriptからカメラを呼び出そうとしています。私のコードは以下の通りです。しかし、私はnullポインタの例外を取得しています。startActivityForResultのNullポインタ例外

主な活動:

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      WebView webview=(WebView)findViewById(R.id.webkitWebView1); 
      WebSettings settings = webview.getSettings(); 
      settings.setJavaScriptEnabled(true); 
      //load html5 page 
      webview.loadUrl("file:///android_asset/www/html/opencamera.html"); 

      openCamera=new OpenCamera(); 
      webview.addJavascriptInterface(openCamera,"camera"); 

     } 

     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (requestCode== 0 && resultCode == Activity.RESULT_OK){ 
       System.out.println("Done"); 
      } 
     } 

カメラコール:

public class OpenCamera extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

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

} 

htmlページ:マニフェストで

<!DOCTYPE HTML> 
    <html> 
    <head> 
    <script type="text/javascript"> 
    function openCamera(){ 
     //alert("cameras"); 
     camera.startCameraActivity(); 
    } 
    </script> 


    <title>Welcome</title> 
    </head> 
    <body> 
    Hello World!!! 
    <br/> 
    <button type="button" onclick="openCamera()">Capture Image</button> 
    </body> 
    </html> 

権限:

<uses-feature android:name="android.hardware.camera" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-feature android:name="android.hardware.camera.autofocus" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 

Logcat:

11-16 08:56:07.133: ERROR/AndroidRuntime(539): java.lang.NullPointerException 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at android.app.Activity.startActivityForResult(Activity.java:2817) 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at com.test.camera.OpenCamera.startCameraActivity(OpenCamera.java:17) 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at android.webkit.WebViewCore.nativeTouchUp(Native Method) 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at android.webkit.WebViewCore.nativeTouchUp(Native Method) 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at android.webkit.WebViewCore.access$3300(WebViewCore.java:52) 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1150) 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at android.os.Looper.loop(Looper.java:123) 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:621) 
11-16 08:56:07.133: ERROR/AndroidRuntime(539):  at java.lang.Thread.run(Thread.java:1096) 
+1

である必要はありません。どこでヌルポインタ例外がありますか?あなたlogcatのトレースを投稿してくださいできますか?最初にヌルポインタが発生した場合は、メインレイアウトでwebviewを使用しているかどうかを確認してください。 – deepa

+1

スタックトレースを供給できますか? –

+0

あなたの目標は、あなたの活動が始まったときにカメラを開くことですか? –

答えて

1

を起動するときには、まだ(Activityを開始するアンドロイド方法に応じて)開始されていないCamera ActivityOpenCameraから活動を始めている。この試みを与える例外を得ている理由でありますしたがって、OpenCameraのコンテキストがnullです。そのため、その時点でContextnullであり、原因はNullPointerExceptionです。

回避策:

WebView

webview.addJavascriptInterface(this,"context"); 

にして、スクリプト内でコンテキストを渡す

public void startCameraActivity(Context con){ 
     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     con.startActivityForResult(intent,0); 
} 

として機能startCameraActivity()にコンテキストを渡し

<script type="text/javascript"> 
    function openCamera(){ 
     camera.startCameraActivity(context); 
    } 
</script> 

OpenCameraは、Activity

0

あなたがマニフェストファイルに適切なインテントフィルタを持つ必要があります。これは、あなたが

+0

あなたが何を意味するのか分からなかった。簡単に説明してください。 – Smitha

+0

これはインテントフィルタについての意味です。 http://developer.android.com/guide/topics/manifest/action-element.htmlはandroid.provider.MediaStore.ACTION_IMAGE_CAPTUREと一致する必要があります。 – caguilar187

+0

ただし、使用しないでください! – Smitha

0

は、あなたがカメラ

Intent intent = new Intent("com.your.package.TAKE_PICTURE"); 
startActivityForResult(intent,0); 

<activity android:name="OpenCamera" android:label="@string/app_name"> 
     <intent-filter>  
      <action android:name="com.your.package.TAKE_PICTURE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
</activity>