Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用OverlyService按钮拍摄屏幕截图_Android - Fatal编程技术网

Android 使用OverlyService按钮拍摄屏幕截图

Android 使用OverlyService按钮拍摄屏幕截图,android,Android,我使用了覆盖服务按钮。当我单击覆盖按钮时,将拍摄快照,但会引发异常 空对象引用上的android.view.Window.getDecorView() 代码如下 主要活动 public class MainActivity extends Activity public View v2; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

我使用了覆盖服务按钮。当我单击覆盖按钮时,将拍摄快照,但会引发异常

空对象引用上的android.view.Window.getDecorView()

代码如下

主要活动

public class MainActivity extends Activity 

    public View v2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        isStoragePermissionGranted();


        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int widthContentView = displaymetrics.widthPixels;
        int heightContentView = displaymetrics.heightPixels;
        Log.e("dis", widthContentView + "  " + heightContentView);


        v2 = getWindow().getDecorView().getRootView();
        Log.e("main", v2.toString());
        Intent svc = new Intent(this, OverlayShowingService.class);
        startService(svc);
        finish();
    }

    public boolean isStoragePermissionGranted() {
        if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED) {
                Log.v(TAG, "Permission is granted");
                return true;
            } else {

                Log.v(TAG, "Permission is revoked");
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                return false;
            }
        } else { //permission is automatically granted on sdk<23 upon installation
            Log.v(TAG, "Permission is granted");
            return true;
        }
    }

    public void takeScreenshot(View v) {

        Date now = new Date();
        android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

        try {

            Log.e("line", "155");
            String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";
            Log.e("line", mPath);
            MainActivity mainActivity = new MainActivity();
            Bitmap bitmap;
            DisplayMetrics displaymetrics = new DisplayMetrics();
            int widthContentView = displaymetrics.widthPixels;
            int heightContentView = displaymetrics.heightPixels;
            Log.e("dis", widthContentView + "  " + heightContentView);
            View  v1 = getWindow().getDecorView().getRootView();
            Log.e("ser", v1.toString());
            v1.setDrawingCacheEnabled(true);
            bitmap = Bitmap.createBitmap(v1.getDrawingCache());
            v1.setDrawingCacheEnabled(false);
            Log.e("line", "163");
            Log.e("line", "166");  
            File imageFile = new File(mPath);
            Log.e("line", "174");
            FileOutputStream outputStream = new FileOutputStream(imageFile);
            Log.e("line", "176");
            int quality = 100;
            bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
            Log.e("line", "179");
            outputStream.flush();
            outputStream.close();


        } catch (Exception e) {

            e.printStackTrace();
        }

    }
公共类MainActivity扩展活动
公众视野v2;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
i存储许可已授予();
DisplayMetrics DisplayMetrics=新的DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int-widthContentView=displaymetrics.widthPixels;
int heightContentView=displaymetrics.heightPixels;
Log.e(“dis”,widthContentView+“”+heightContentView);
v2=getWindow().getDecorView().getRootView();
Log.e(“main”,v2.toString());
Intent svc=新Intent(这是OverlyShowingService.class);
startService(svc);
完成();
}
公共布尔值IsStorage PermissionGrated(){
如果(Build.VERSION.SDK_INT>=23){
if(checkSelfPermission(android.Manifest.permission.WRITE\u外部存储)
==PackageManager.权限(已授予){
Log.v(标记“已授予许可”);
返回true;
}否则{
Log.v(标记“权限被撤销”);
ActivityCompat.requestPermissions(这个新字符串[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
返回false;
}

}否则{//在sdk上会自动授予权限我想您忘记添加权限了

<manifest .....>

         <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
         <application

             ..............
             .............>
          <service
                    android:name=".services.OverlayShowingService"
                    android:enabled="true"
                    android:exported="false">

                </service>


            </application>
</manifest>


能否提供一个带有行号的完整堆栈跟踪,以便我们查看引发异常的位置?现在检查//此行异常cameMainActivity扩展了AppCompatActivity I更改为AppCompatActivity,但出现异常
<manifest .....>

         <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
         <application

             ..............
             .............>
          <service
                    android:name=".services.OverlayShowingService"
                    android:enabled="true"
                    android:exported="false">

                </service>


            </application>
</manifest>