1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
/*
* 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.service.carrier;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Service;
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 an
* {@link android.telephony.TelephonyManager#ACTION_CARRIER_MESSAGING_CLIENT_SERVICE}
* action in the intent handler, and be protected with
* {@link android.Manifest.permission#BIND_CARRIER_MESSAGING_CLIENT_SERVICE}.
* However the service does not have to be exported.
*
* <p>The service must be associated with a non-main process, meaning it must have an
* {@code android:process} tag in its manifest entry.
*
* <p>An app can use
* {@link android.content.pm.PackageManager#setComponentEnabledSetting(ComponentName, int, int)}
* to disable or enable the service. An app 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.
*
* <p>Example: First, define a subclass in the application:
* <pre>
* public class MyCarrierMessagingClientService extends CarrierMessagingClientService {
* }
* </pre>
* Then, declare it in its {@code AndroidManifest.xml}:
* <pre>
* <service
* android:name=".MyCarrierMessagingClientService"
* android:exported="false"
* android:process=":persistent"
* android:permission="android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE">
* <intent-filter>
* <action android:name="android.telephony.action.CARRIER_MESSAGING_CLIENT_SERVICE" />
* </intent-filter>
* </service>
* </pre>
*/
public class CarrierMessagingClientService extends Service {
private final ICarrierMessagingClientServiceImpl mImpl;
public CarrierMessagingClientService() {
mImpl = new ICarrierMessagingClientServiceImpl();
}
@Override
@NonNull
public final IBinder onBind(@Nullable Intent intent) {
return mImpl.asBinder();
}
private class ICarrierMessagingClientServiceImpl extends ICarrierMessagingClientService.Stub {
}
}
|