AppFunctionService


@RequiresApi(value = 36)
abstract class AppFunctionService : AppFunctionService


Abstract base class to provide app functions to the system.

This class wraps AppFunctionService functionalities and provides an API that uses androidx.appfunctions classes.

Include the following in the manifest:

<service android:name=".YourService"
android:permission="android.permission.BIND_APP_FUNCTION_SERVICE">
<intent-filter>
<action android:name="android.app.appfunctions.AppFunctionService" />
</intent-filter>
</service>

Summary

Public constructors

Public functions

open Unit

Implementing class can override this method to perform setup but should always call the superclass implementation.

open Unit

Implementing class can override this method to perform cleanup but should always call the superclass implementation.

abstract Unit
@MainThread
onExecuteFunction(
    request: ExecuteAppFunctionRequest,
    cancellationSignal: CancellationSignal,
    callback: Consumer<ExecuteAppFunctionResponse>
)

Called by the system following an AppFunctionManager.executeAppFunction call that targets an app function identifier referenced by the XML asset associated with this service.

final Unit
onExecuteFunction(
    request: ExecuteAppFunctionRequest,
    callingPackage: String,
    signingInfo: SigningInfo,
    cancellationSignal: CancellationSignal,
    callback: OutcomeReceiver<ExecuteAppFunctionResponseAppFunctionException>
)

Implements AppFunctionService.onExecuteFunction and delegates the execution to onExecuteFunction when called by the system.

open AppFunctionInventory?

Resolve the AppFunctionInventory.

Inherited functions

From android.app.appfunctions.AppFunctionService
IBinder
onBind(intent: Intent?)
From android.content.Context
Boolean
bindIsolatedService(
    service: Intent,
    flags: Context.BindServiceFlags,
    instanceName: String,
    executor: Executor,
    conn: ServiceConnection
)
Int
ColorStateList
Drawable?
String
getString(resId: Int)
String
getString(resId: Int, vararg formatArgs: Any)
T
<T : Any> getSystemService(serviceClass: Class<T>)
CharSequence
getText(resId: Int)
TypedArray
TypedArray
TypedArray
TypedArray
obtainStyledAttributes(
    set: AttributeSet?,
    attrs: IntArray,
    defStyleAttr: Int,
    defStyleRes: Int
)
Unit
Unit
sendBroadcastWithMultiplePermissions(
    intent: Intent,
    receiverPermissions: Array<String>
)
From android.content.ContextWrapper
Boolean
bindIsolatedService(
    service: Intent,
    flags: Int,
    instanceName: String,
    executor: Executor,
    conn: ServiceConnection
)
Boolean
bindService(
    service: Intent,
    conn: ServiceConnection,
    flags: Context.BindServiceFlags
)
Boolean
bindService(service: Intent, conn: ServiceConnection, flags: Int)
Boolean
bindService(
    service: Intent,
    flags: Context.BindServiceFlags,
    executor: Executor,
    conn: ServiceConnection
)
Boolean
bindService(
    service: Intent,
    flags: Int,
    executor: Executor,
    conn: ServiceConnection
)
Boolean
bindServiceAsUser(
    service: Intent,
    conn: ServiceConnection,
    flags: Context.BindServiceFlags,
    user: UserHandle
)
Boolean
bindServiceAsUser(
    service: Intent,
    conn: ServiceConnection,
    flags: Int,
    user: UserHandle
)
Int
Int
IntArray
Int
Int
checkCallingUriPermission(uri: Uri, modeFlags: Int)
IntArray
Int
checkContentUriPermissionFull(uri: Uri, pid: Int, uid: Int, modeFlags: Int)
Int
checkPermission(permission: String, pid: Int, uid: Int)
Int
Int
checkUriPermission(uri: Uri, pid: Int, uid: Int, modeFlags: Int)
Int
checkUriPermission(
    uri: Uri?,
    readPermission: String?,
    writePermission: String?,
    pid: Int,
    uid: Int,
    modeFlags: Int
)
IntArray
checkUriPermissions(
    uris: MutableList<Uri>,
    pid: Int,
    uid: Int,
    modeFlags: Int
)
Unit
Context
createAttributionContext(attributionTag: String?)
Context
createConfigurationContext(overrideConfiguration: Configuration)
Context
createContext(contextParams: ContextParams)
Context
Context
Context
Context
Context
createPackageContext(packageName: String, flags: Int)
Context
createWindowContext(type: Int, options: Bundle?)
Context
createWindowContext(display: Display, type: Int, options: Bundle?)
Array<String>
Boolean
Boolean
Boolean
Unit
enforceCallingOrSelfPermission(permission: String, message: String?)
Unit
enforceCallingOrSelfUriPermission(
    uri: Uri,
    modeFlags: Int,
    message: String
)
Unit
enforceCallingPermission(permission: String, message: String?)
Unit
enforceCallingUriPermission(uri: Uri, modeFlags: Int, message: String)
Unit
enforcePermission(permission: String, pid: Int, uid: Int, message: String?)
Unit
enforceUriPermission(
    uri: Uri,
    pid: Int,
    uid: Int,
    modeFlags: Int,
    message: String
)
Unit
enforceUriPermission(
    uri: Uri?,
    readPermission: String?,
    writePermission: String?,
    pid: Int,
    uid: Int,
    modeFlags: Int,
    message: String?
)
Array<String>
File
File
getDir(name: String, mode: Int)
File?
Array<File>
File
SharedPreferences
Any
String?
getSystemServiceName(serviceClass: Class<*>)
Unit
grantUriPermission(toPackage: String, uri: Uri, modeFlags: Int)
Boolean
moveDatabaseFrom(sourceContext: Context, name: String)
Boolean
moveSharedPreferencesFrom(sourceContext: Context, name: String)
FileInputStream
FileOutputStream
openFileOutput(name: String, mode: Int)
SQLiteDatabase
openOrCreateDatabase(
    name: String,
    mode: Int,
    factory: SQLiteDatabase.CursorFactory
)
SQLiteDatabase
openOrCreateDatabase(
    name: String,
    mode: Int,
    factory: SQLiteDatabase.CursorFactory,
    errorHandler: DatabaseErrorHandler?
)
Drawable
Unit
Unit
Unit
Intent?
Intent?
registerReceiver(
    receiver: BroadcastReceiver?,
    filter: IntentFilter,
    flags: Int
)
Intent?
registerReceiver(
    receiver: BroadcastReceiver?,
    filter: IntentFilter,
    broadcastPermission: String?,
    scheduler: Handler?
)
Intent?
registerReceiver(
    receiver: BroadcastReceiver?,
    filter: IntentFilter,
    broadcastPermission: String?,
    scheduler: Handler?,
    flags: Int
)
Unit
Unit
Unit
Unit
revokeUriPermission(uri: Uri, modeFlags: Int)
Unit
revokeUriPermission(targetPackage: String, uri: Uri, modeFlags: Int)
Unit
Unit
sendBroadcast(intent: Intent, receiverPermission: String?)
Unit
sendBroadcast(intent: Intent, receiverPermission: String?, options: Bundle?)
Unit
Unit
sendBroadcastAsUser(
    intent: Intent,
    user: UserHandle,
    receiverPermission: String?
)
Unit
sendOrderedBroadcast(intent: Intent, receiverPermission: String?)
Unit
sendOrderedBroadcast(
    intent: Intent,
    receiverPermission: String?,
    options: Bundle?
)
Unit
sendOrderedBroadcast(
    intent: Intent,
    receiverPermission: String?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
sendOrderedBroadcast(
    intent: Intent,
    receiverPermission: String?,
    options: Bundle?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
sendOrderedBroadcast(
    intent: Intent,
    receiverPermission: String?,
    receiverAppOp: String?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
sendOrderedBroadcast(
    intent: Intent,
    initialCode: Int,
    receiverPermission: String?,
    receiverAppOp: String?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialData: String?,
    initialExtras: Bundle?,
    options: Bundle?
)
Unit
sendOrderedBroadcastAsUser(
    intent: Intent,
    user: UserHandle,
    receiverPermission: String?,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
Unit
sendStickyBroadcast(intent: Intent, options: Bundle?)
Unit
Unit
sendStickyOrderedBroadcast(
    intent: Intent,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
sendStickyOrderedBroadcastAsUser(
    intent: Intent,
    user: UserHandle,
    resultReceiver: BroadcastReceiver?,
    scheduler: Handler?,
    initialCode: Int,
    initialData: String?,
    initialExtras: Bundle?
)
Unit
setTheme(resid: Int)
Unit
Unit
Unit
Unit
startActivities(intents: Array<Intent>, options: Bundle?)
Unit
Unit
startActivity(intent: Intent, options: Bundle?)
ComponentName?
Boolean
startInstrumentation(
    className: ComponentName,
    profileFile: String?,
    arguments: Bundle?
)
Unit
startIntentSender(
    intent: IntentSender,
    fillInIntent: Intent?,
    flagsMask: Int,
    flagsValues: Int,
    extraFlags: Int
)
Unit
startIntentSender(
    intent: IntentSender,
    fillInIntent: Intent?,
    flagsMask: Int,
    flagsValues: Int,
    extraFlags: Int,
    options: Bundle?
)
ComponentName?
startService(service: Intent)
Boolean
Unit
Unit
Unit
Unit
Unit
Unit
updateServiceGroup(conn: ServiceConnection, group: Int, importance: Int)
From android.app.Service
Unit
Unit
dump(fd: FileDescriptor, writer: PrintWriter, args: Array<String>)
Unit
Unit
Unit
onRebind(intent: Intent)
Unit
onStart(intent: Intent, startId: Int)
Int
onStartCommand(intent: Intent, flags: Int, startId: Int)
Unit
onTaskRemoved(rootIntent: Intent)
Unit
onTimeout(startId: Int)
Unit
onTimeout(startId: Int, fgsType: Int)
Unit
onTrimMemory(level: Int)
Boolean
onUnbind(intent: Intent)
Unit
startForeground(id: Int, notification: Notification)
Unit
startForeground(
    id: Int,
    notification: Notification,
    foregroundServiceType: Int
)
Unit
stopForeground(notificationBehavior: Int)
Unit
stopForeground(removeNotification: Boolean)
Unit
Unit
stopSelf(startId: Int)
Boolean
stopSelfResult(startId: Int)

Public constructors

AppFunctionService

Added in 1.0.0-alpha10
AppFunctionService()

Public functions

onCreate

@CallSuper
open fun onCreate(): Unit

Implementing class can override this method to perform setup but should always call the superclass implementation.

onDestroy

@CallSuper
open fun onDestroy(): Unit

Implementing class can override this method to perform cleanup but should always call the superclass implementation.

onExecuteFunction

Added in 1.0.0-alpha10
@MainThread
abstract fun onExecuteFunction(
    request: ExecuteAppFunctionRequest,
    cancellationSignal: CancellationSignal,
    callback: Consumer<ExecuteAppFunctionResponse>
): Unit

Called by the system following an AppFunctionManager.executeAppFunction call that targets an app function identifier referenced by the XML asset associated with this service.

You can determine which function to execute using ExecuteAppFunctionRequest.functionIdentifier. This allows your service to route the incoming request to the appropriate logic for handling the specific function. See ExecuteAppFunctionRequest for how to retrieve the function's arguments.

This method is always triggered in the main thread. You should run heavy tasks on a worker thread and dispatch the result with the given callback. You should always report back the result using the callback, no matter if the execution was successful or not.

The implementation should try to respect the provided CancellationSignal, if possible.

Parameters
request: ExecuteAppFunctionRequest

The function execution request.

cancellationSignal: CancellationSignal

A signal to cancel the execution.

callback: Consumer<ExecuteAppFunctionResponse>

A callback to report back the result or error.

onExecuteFunction

Added in 1.0.0-alpha10
final fun onExecuteFunction(
    request: ExecuteAppFunctionRequest,
    callingPackage: String,
    signingInfo: SigningInfo,
    cancellationSignal: CancellationSignal,
    callback: OutcomeReceiver<ExecuteAppFunctionResponseAppFunctionException>
): Unit

Implements AppFunctionService.onExecuteFunction and delegates the execution to onExecuteFunction when called by the system.

Parameters
request: ExecuteAppFunctionRequest

The function execution request.

callingPackage: String

The package name of the app that is requesting the execution. It is strongly recommended that you do not alter your function’s behavior based on this value. Your function should behave consistently for all callers to ensure a predictable experience.

signingInfo: SigningInfo

The signing information of the app that is requesting the execution. It is strongly recommended that you do not alter your function’s behavior based on this value. Your function should behave consistently for all callers to ensure a predictable experience.

cancellationSignal: CancellationSignal

A signal to cancel the execution.

callback: OutcomeReceiver<ExecuteAppFunctionResponseAppFunctionException>

A callback to report back the result or error.

resolveInventory

open fun resolveInventory(): AppFunctionInventory?

Resolve the AppFunctionInventory.