Радиоприемник в Android не работает - PullRequest
0 голосов
/ 27 мая 2020

У меня есть простая служба, запускающая сеанс установки пакетов, и я хочу получить от нее статус. Диспетчер пакетов имеет разные статусы, и в зависимости от того, какой статус я получаю, я хочу, чтобы моя активность создавала диалог, но я столкнулся с проблемой. InstallerService.kt:

class InstallerService: Service() {

    override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
        when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)) {
            PackageInstaller.STATUS_PENDING_USER_ACTION -> {
                Toast.makeText(this, "Installing...", Toast.LENGTH_SHORT).show()
                Log.d(TAG, "Requesting user confirmation for installation")
                val confirmationIntent =
                    intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
                confirmationIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                try {
                    startActivity(confirmationIntent)
                } catch (e: Exception) {
                }
            }
            PackageInstaller.STATUS_SUCCESS -> {
                Log.d(TAG, "Installation succeed")
                getSharedPreferences("installPrefs", Context.MODE_PRIVATE).edit().putBoolean("isInstalling", false).apply()
                val mIntent = Intent(MainActivity.INSTALL_COMPLETED)
                mIntent.action = MainActivity.INSTALL_COMPLETED
                LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
            }
            PackageInstaller.STATUS_FAILURE_ABORTED -> {
                val mIntent = Intent(MainActivity.INSTALL_ABORTED)
                mIntent.action = MainActivity.INSTALL_ABORTED
                LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
            }
            PackageInstaller.STATUS_FAILURE_INVALID -> {
                val mIntent = Intent(MainActivity.INSTALL_INVALID)
                mIntent.action = MainActivity.INSTALL_INVALID
                LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
            }
            PackageInstaller.STATUS_FAILURE_CONFLICT -> {
                val mIntent = Intent(MainActivity.INSTALL_CONFLICT)
                mIntent.action = MainActivity.INSTALL_CONFLICT
                LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
            }
            PackageInstaller.STATUS_FAILURE_STORAGE -> {
                val mIntent = Intent(MainActivity.INSTALL_STORAGE)
                mIntent.action = MainActivity.INSTALL_STORAGE
                LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
            }
            PackageInstaller.STATUS_FAILURE_BLOCKED -> {
                val mIntent = Intent(MainActivity.INSTALL_BLOCKED)
                mIntent.action = MainActivity.INSTALL_BLOCKED
                sendBroadcast(mIntent)
            }
            else -> {
                Log.d(TAG, "Installation failed")
                val mIntent = Intent(MainActivity.INSTALL_FAILED)
                mIntent.action = MainActivity.INSTALL_ABORTED
                sendBroadcast(mIntent)
            }
        }
        stopSelf()
        return START_NOT_STICKY
    }

    @Nullable
    override fun onBind(intent: Intent?): IBinder? {
        return null
    }

    companion object{
        const val TAG = "VMInstall"
    }

}

Теперь, когда k пытается получить намеренное действие, он вообще ничего не делает MainActivity.kt:

class MainActivity : Main() {

    private var isParent = true

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val toolbar: Toolbar = findViewById(R.id.home_toolbar)
        setSupportActionBar(toolbar)

        val navHost = findNavController(R.id.bottom_nav_host)
        val appBarConfiguration = AppBarConfiguration(navHost.graph)
        toolbar.setupWithNavController(navHost, appBarConfiguration)

        navHost.addOnDestinationChangedListener{_, currFrag: NavDestination, _ ->
            isParent = when (currFrag.id) {
                R.id.home_fragment -> true
                else -> false
            }

            setDisplayHomeAsUpEnabled(!isParent)

        }

        registerReceivers()

    }

    private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            when (intent.action) {
                INSTALL_COMPLETED -> launchVanced()
            }
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver)
    }

    override fun onPause() {
        super.onPause()
        LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver)
    }

    override fun onResume() {
        super.onResume()
        registerReceivers()
    }

    private fun registerReceivers() {
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
            INSTALL_COMPLETED
        ))
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
            INSTALL_ABORTED
        ))
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
            INSTALL_BLOCKED
        ))
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
            INSTALL_STORAGE
        ))
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
            INSTALL_CONFLICT
        ))
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
            INSTALL_FAILED
        ))
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, IntentFilter(
            INSTALL_INVALID
        ))

    }

    companion object {
        const val INSTALL_COMPLETED = "Installation completed"
        const val INSTALL_ABORTED = "user aborted installation"
        const val INSTALL_BLOCKED = "user blocked installation"
        const val INSTALL_STORAGE = "there was an error with storage.\n Hold up how is that even possible?"
        const val INSTALL_CONFLICT = "app conflicts with already installed app"
        const val INSTALL_FAILED = "it just failed idk"
        const val INSTALL_INVALID = "apk files are invalid"

    }
}

Рекомендации? Заранее спасибо

1 Ответ

0 голосов
/ 29 мая 2020

Исправлено с использованием

private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        when {
            inten.action.equals(INSTALL_COMPLETED) -> launchVanced()
        }
    }
}

вместо

private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        when (intent.action) {
            INSTALL_COMPLETED -> launchVanced()
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...