2012-03-17 14 views
0

私はアンドロイドエミュレータでスクリーンショットを取るためのコードをテストしようとしています。私が開始するには、次のコードを持っている:Androidスクリーンショットアプリ - nullポインタ例外

View content = ((ViewGroup)findViewById(android.R.id.content)).getChildAt(0); 
    content.setDrawingCacheEnabled(true); 
    Bitmap bitmap = Bitmap.createBitmap(content.getDrawingCache()); 
    content.setDrawingCacheEnabled(false); 

を誰かが私が間違って何をやっていると指摘してくださいすることができます私はライン551

でcreateBitmapでnullポインタ例外を取得します。

答えて

1

私はあなたの問題はあなたのビューの内容から来ると思う:

View content = ((ViewGroup)findViewById(android.R.id.content)).getChildAt(0); 

あなたはgetChildAt(0)を削除しようとしたのかgetRootView()でそれを交換しますか?エルス

それはあなたを助けることができれば、そこにサンプルとの良好なウェブサイトは、(最初​​のフォーラムのページの最後のポスト)があります:

Capture Screen With Coding

あなたはそれを解決する方法を見つけたら教えてください。

+0

::ビットマップビットマップ= content.getDrawingCacheを()、と私は、nullポインタ例外を取得していない、これを試してみてください。エミュレータがルート権限を持っているため、電話でこのコードを実行した場合、例外が発生しますか?また、なぜアプリはREAD_FRAME_BUFFER権限を必要としませんか?ありがとう – Jake

+0

エミュレータで実行すると、私はビットマップ= nullを取得します。 – Jake

0

場合によってはMeasureSpecを使用する必要があります。私は、コードを使用

View content = ((ViewGroup)findViewById(android.R.id.content)); 
content.setDrawingCacheEnabled(true); 
content.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
content.layout(0, 0, content.getMeasuredWidth(), content.getMeasuredHeight()); 
content.buildDrawingCache(true); 
Bitmap bitmap = Bitmap.createBitmap(content.getDrawingCache());