blob: 3f2b025016df613d4e4abafc653c9e9ec7d9bed1 [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.app;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
/**
* If the default SMS app has a service that extends this class, the system always tries to bind
* it so that the process is always running, which allows the app to have a persistent connection
* to the server.
*
* <p>The service must have {@link android.telephony.TelephonyManager#ACTION_SMS_APP_SERVICE}
* action in the intent handler, and be protected with
* {@link android.Manifest.permission#BIND_SMS_APP_SERVICE}. However the service does not have to
* be exported.
*
* <p>Apps can use
* {@link android.content.pm.PackageManager#setComponentEnabledSetting(ComponentName, int, int)}
* to disable/enable the service. Apps should use it to disable the service when it no longer needs
* to be running.
*
* <p>When the owner process crashes, the service will be re-bound automatically after a
* back-off.
*
* <p>Note the process may still be killed if the system is under heavy memory pressure, in which
* case the process will be re-started later.
*/
public class SmsAppService extends Service {
private final ISmsAppService mImpl;
public SmsAppService() {
mImpl = new ISmsAppServiceImpl();
}
@Override
public final IBinder onBind(Intent intent) {
return mImpl.asBinder();
}
private class ISmsAppServiceImpl extends ISmsAppService.Stub {
}
}