В настоящее время я работаю над приложением для видеоконференций, чего я хочу добиться, чтобы, когда кто-то звонит мне и, получив его звонок, я закрывал приложение, удаляя его из последних приложений, а затем хочу уведомить вызывающего абонента, отклонив его. вызов, когда приложение закрыто из последних приложений
public class RecentAppService extends Service {
private static final String TAG = "RecentAppStatus";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "onCreate()");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand()");
return START_STICKY;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
Log.i(TAG, "onTaskRemoved()....!!!!!!!!!!");
Boolean callactive= AppsharedPreference.getAppPrefrerence(this)
.readBooleanData("callingactive");
Log.i(TAG, "onTaskRemoved()....!!!!!!!!!! Callactive ::::"+callactive);
if(callactive){
NotificationManager nManager = ((NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE));
nManager.cancelAll();
rejectCall();
}
Intent restartService = new Intent(getApplicationContext(), this.getClass());
restartService.setPackage(getPackageName());
PendingIntent restartServicePI = PendingIntent.getService(
getApplicationContext(), 1, restartService,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() +1000, restartServicePI);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy()");
}
@Override
public void onLowMemory() {
super.onLowMemory();
Log.i(TAG, "onLowMemory()");
}
public void rejectCall(){
AsyncTaskRunner runner = new AsyncTaskRunner(this);
runner.execute();
}
}
Я добавил вышеупомянутый сервис Sticky для выполнения задач, когда кто-то закрывает мое приложение из недавних приложений, я также добавил приведенный ниже код, содержащий Asynctask, к Сервису для выполнения функции отклонения вызова
class AsyncTaskRunner extends AsyncTask<String, String, String> {
private String resp;
private Context mcontext;
public AsyncTaskRunner(Context mContext) {
this.mcontext=mContext;
}
@Override
protected String doInBackground(String... params) {
publishProgress("Sleeping..."); // Calls onProgressUpdate()
try {
String mUserHash= AppsharedPreference.getAppPrefrerence(mcontext)
.readStringData("mUserHash");
String rejectApi= AppsharedPreference.getAppPrefrerence(mcontext)
.readStringData("rejectApi");
String apiToken= AppsharedPreference.getAppPrefrerence(mcontext)
.readStringData("apiToken");
String room= AppsharedPreference.getAppPrefrerence(mcontext)
.readStringData("room");
String callId= AppsharedPreference.getAppPrefrerence(mcontext)
.readStringData("callId");
ApiCallData apiCallData = new ApiCallData(rejectApi, apiToken, room, callId,mUserHash);
WebService.getWebservice().rejectCall(mcontext, apiCallData, new FutureCallback<String>() {
@Override
public void onCompleted(Exception e, String result) {
Log.i(TAG, "onTaskRemoved()....!!!!!!!!!! Result"+result);
}
});
} catch (Exception e) {
e.printStackTrace();
resp = e.getMessage();
}
return resp;
}
@Override
protected void onPostExecute(String result) {
Log.i(TAG, "onTaskRemoved()....!!!!!!!!!! Result"+result);
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(String... text) {
}
}
Все работает нормально, и вызов правильно отключается на стороне вызывающего абонента, когда приложение не на переднем плане, а когда приложение открыто, тогда задача не выполняется в Asynctask, т. Е. Asynctask останавливается, когда приложение закрывается. Я новичок в Android, спасибо