活动没有重新开始

如何解决活动没有重新开始

我创建了一个应用,该应用使用firebase推送通知获取命令并执行该任务。 我的应用程序没有任何可见活动,但有一项在后台持续运行的服务。

我已经实现了使用Media Projection Api截屏的功能

当我获得截屏命令时,应用程序启动ScreenProjectionActivity,截屏并完成。但是当它再次出现时,Screenshot ScreenProjectionActivity的命令不会再次启动。我不知道我做错了什么,在哪里做错了。

这是我从服务中启动的方式。

context.startActivity(
                        Intent(this,ScreenProjectionActivity::class.java)
                            .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
                            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                    )

ScreenProjectionActivity.kt

class ScreenProjectionActivity : Activity()
{
    lateinit var context: Context
    private var mHandler: Handler? = null

    @RequiresApi(Build.VERSION_CODES.KITKAT_WATCH)
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        val tv = TextView(this)
        tv.text = ""
        setContentView(tv)
        context = this

        log("onCreate")

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        {
            val mgr = getSystemService(MEDIA_PROJECTION_SERVICE) as mediaprojectionmanager
            startActivityForResult(mgr.createScreenCaptureIntent(),7575)

            // start capture handling thread
            object : Thread() {
                override fun run() {
                    Looper.prepare()
                    mHandler = Handler()
                    Looper.loop()
                }
            }.start()
        }
    }

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    override fun onActivityResult(requestCode: Int,resultCode: Int,data: Intent?) {
        super.onActivityResult(requestCode,resultCode,data)

        if (requestCode == 7575 && resultCode == RESULT_OK)
        {
            log("if taking screen")
            //TakeScreenShot(applicationContext,Handler(Looper.getMainLooper()),data).start()
            takeScreenShot(resultCode,data)
        }

        super.onBackpressed()
    }

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    private fun takeScreenShot(resultCode: Int,data: Intent?)
    {
        log("takeScreenshot")
        SystemClock.sleep(1000)
        var flagScreenShot = true

        val metrics = displayMetrics()
        val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
        val mgr = getSystemService(MEDIA_PROJECTION_SERVICE) as mediaprojectionmanager

        windowManager.defaultdisplay.getMetrics(metrics)

        val mMediaProjection = mgr.getMediaProjection(resultCode,data!!)

        val imgReader: ImageReader = ImageReader.newInstance(
            metrics.widthPixels,metrics.heightPixels,PixelFormat.RGBA_8888,1
        )

        val onImageAvailableListener =
            OnImageAvailableListener {
                log("onImageAvailableListener")
                val image: Image? = it?.acquireLatestimage()

                if (image != null && flagScreenShot)
                {
                    flagScreenShot = false
                    mMediaProjection?.stop()
                    log("mMediaProjection Stopped!")
                    imgReader.setonImageAvailableListener(null,null)

                    val mWidth = image.width
                    val mHeight = image.height

                    val planes = image.planes
                    val buffer = planes[0].buffer
                    val pixelStride = planes[0].pixelStride
                    val rowStride = planes[0].rowStride
                    val rowPadding = rowStride - pixelStride * mWidth

                    val bitmap = Bitmap.createBitmap(
                        mWidth + rowPadding / pixelStride,mHeight,Bitmap.Config.ARGB_8888
                    )
                    bitmap.copyPixelsFromBuffer(buffer)
                    saveImage(bitmap)
                }
                log("image close")
                image?.close()
            }

        mMediaProjection?.createVirtualdisplay(
            "ScreenCapture",metrics.widthPixels,metrics.densityDpi,displayManager.VIRTUAL_disPLAY_FLAG_AUTO_MIRROR,imgReader.surface,null,mHandler
        )

        imgReader.setonImageAvailableListener(onImageAvailableListener,mHandler)
    }

    private fun saveImage(finalBitmap: Bitmap) {
        val root: String = Environment.getExternalStorageDirectory().toString()
        val myDir = File("$root/saved_images")
        myDir.mkdirs()
        val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss",Locale.ENGLISH).format(Date())
        val fname = "Shutta_$timeStamp.jpg"
        val file = File(myDir,fname)
        if (file.exists()) file.delete()
        try
        {
            val out = FileOutputStream(file)
            finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out)
            out.flush()
            out.close()

            log("Image Saved.")
            finish()

        } catch (e: Exception) {
            log("Image Saved Exception: $e")
        }
    }


    private fun encodeImage(bm: Bitmap): String {
        val baos = ByteArrayOutputStream()
        bm.compress(Bitmap.CompressFormat.JPEG,baos)
        val b = baos.toByteArray()
        return Base64.encodetoString(b,Base64.DEFAULT)
    }

    override fun onDestroy() {
        super.onDestroy()
    }

}

在这里帮助我。谢谢

解决方法

我自己解决了这个问题,我所做的就是使用这些标志的startActivity

applicationContext.startActivity(
                    Intent(this,ScreenProjectionActivity::class.java)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                )

并在清单中:

<activity
        android:name=".ScreenProjectionActivity"
        android:excludeFromRecents="true"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?