Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private val ACTION_INSTALL_COMPLETE = "com.example.myapplication.INSTALL_COMPLETE"
- @Throws(IOException::class)
- fun installPackage(context: Context, inputStream: InputStream) {
- val packageInstaller = context.packageManager.packageInstaller
- packageInstaller.registerSessionCallback(object : PackageInstaller.SessionCallback() {
- override fun onProgressChanged(sessionId: Int, progress: Float) {
- Log.d("installPackage", "onProgressChanged, progress: $progress")
- }
- override fun onActiveChanged(sessionId: Int, active: Boolean) {
- Log.d("installPackage", "onActiveChanged, active: $active")
- }
- override fun onFinished(sessionId: Int, success: Boolean) {
- Log.d("installPackage", "onFinished")
- }
- override fun onBadgingChanged(sessionId: Int) {
- Log.d("installPackage", "onBadgingChanged")
- }
- override fun onCreated(sessionId: Int) {
- Log.d("installPackage", "onCreated")
- }
- })
- val sessionId = packageInstaller.createSession(SessionParams(SessionParams.MODE_FULL_INSTALL))
- val session = packageInstaller.openSession(sessionId)
- val sizeBytes: Long = 0
- var out: OutputStream? = null
- out = session.openWrite("my_app_session", 0, sizeBytes)
- var total = 0
- val buffer = ByteArray(65536)
- var c: Int
- while (inputStream.read(buffer).also { c = it } != -1) {
- total += c
- out.write(buffer, 0, c)
- }
- session.fsync(out)
- inputStream.close()
- out.close()
- session.commit(createIntentSender(this, sessionId))
- session.close()
- }
- private fun createIntentSender(context: Context, sessionId: Int): IntentSender {
- val pendingIntent = PendingIntent.getBroadcast(
- context,
- sessionId,
- Intent(ACTION_INSTALL_COMPLETE),
- 0)
- return pendingIntent.intentSender
- }
- class Receiver : BroadcastReceiver() {
- override fun onReceive(context: Context?, intent: Intent?) {
- Log.d("onReceive", "$intent, context: $context")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment