-1

Я начал деятельность из фонового сервиса, используя следующий фрагмент кода:Android послевкусия() не закрывает приложение, но свести к минимуму его

Intent intent = new Intent(getApplicationContext(),AlarmActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
startActivity(intent); 

Но когда я закончу свою деятельность, нажав OK или Кнопка Snooze приложение не закрывается, а сводит к минимуму.
Когда это свернутое приложение открыто, будильник начинает звонить снова, пока приложение не будет закрыто вручную.
Я также пробовал следующие команды, но не получил.

android.os.Process.killProcess(android.os.Process.myPid()); 

 

System.exit(1); 

Что может быть проблема?

ActivityCode:

import android.content.Context; 
import android.graphics.Point; 
import android.graphics.PorterDuff; 
import android.media.AudioAttributes; 
import android.media.AudioManager; 
import android.media.Ringtone; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.PowerManager; 
import android.os.Vibrator; 
import android.support.annotation.RequiresApi; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Display; 
import android.view.Gravity; 
import android.view.View; 
import android.view.WindowManager; 
import android.view.animation.Animation; 
import android.view.animation.ScaleAnimation; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.solutionz.battery.saver.master.alarm.utils.AdInterstitial; 
import com.solutionz.battery.saver.master.alarm.utils.AppGlobal; 
import com.solutionz.battery.saver.master.alarm.utils.MySharedPreferences; 

public class AlarmActivity extends AppCompatActivity { 
    Context context; 
    TextView title_tv, message_tv; 
    ImageView batteryIcon_iv; 
    TextView ok_tv, snooze_tv; 
    boolean isCharging; 
    Ringtone ringtone; 
    Vibrator vibrator; 
    Handler handler; 
    Runnable runnable; 
    PowerManager.WakeLock screenLock; 
    MySharedPreferences mySharedPreferences; 
    AdInterstitial adInterstitial; 

    long[] pattern = {1000, 500, 1000, 1000, 500}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     context = this; 
     setContentView(R.layout.activity_alarm); 
     mySharedPreferences = new MySharedPreferences(context); 
     adInterstitial = new AdInterstitial(context); 
     screenLock = ((PowerManager) getSystemService(POWER_SERVICE)).newWakeLock(
       PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG"); 
     screenLock.acquire(); 

     setScreenSize(); 
     setViews(); 
     setContent(); 
     setTimer(); 
     adInterstitial.requestLoadInterstitial(false); 
    } 

    private void setScreenSize() { 
     // getting and setting the window size 
     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     // int width = (int) (size.x * 0.7); 
     // int height = (int) (size.y * 0.4); 

     WindowManager.LayoutParams params = getWindow().getAttributes(); 
     params.gravity = Gravity.CENTER; 
     //params.height = height; 
     //params.width = width; 
     params.height = WindowManager.LayoutParams.WRAP_CONTENT; 
     params.width = WindowManager.LayoutParams.WRAP_CONTENT; 

     this.getWindow().setAttributes(params); 
    } 

    private void setViews() { 
     title_tv = (TextView) findViewById(R.id.title_tv); 
     message_tv = (TextView) findViewById(R.id.message_tv); 
     batteryIcon_iv = (ImageView) findViewById(R.id.batteryIcon_iv); 
     ok_tv = (TextView) findViewById(R.id.ok_tv); 
     snooze_tv = (TextView) findViewById(R.id.snooze_tv); 

     scaleView(batteryIcon_iv, 0.7f, 1.0f); 

     ok_tv.getCompoundDrawables()[1].mutate().setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP); 
     snooze_tv.getCompoundDrawables()[1].mutate().setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP); 

     ok_tv.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       mySharedPreferences.SetLastNotifiedChargingState(isCharging); 
       mySharedPreferences.SetIsNotified(true); 
       finish(); 
       //android.os.Process.killProcess(android.os.Process.myPid()); 
//     System.exit(1); 
      } 
     }); 
     snooze_tv.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       mySharedPreferences.SetIsSnoozed(true); 
       finish(); 
//android.os.Process.killProcess(android.os.Process.myPid()); 
//     System.exit(1); 
       } 
      } 
     }); 
    } 

    private void setContent() { 
     Bundle bundle = getIntent().getBundleExtra("data"); 
     title_tv.setText(bundle.getString("title")); 
     message_tv.setText(bundle.getString("message")); 
     isCharging = bundle.getBoolean("isCharging"); 

     if (!isCharging) { 
      batteryIcon_iv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_battery_30)); 
      batteryIcon_iv.getDrawable().mutate().setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP); 
     } else { 
      batteryIcon_iv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_battery_charging_80)); 
      batteryIcon_iv.getDrawable().mutate().setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP); 
     } 
     // playAlarmTone(); 
     mediaPlayerSetting(); 
    } 

    public void scaleView(View v, float startScale, float endScale) { 
     Animation anim = new ScaleAnimation(
       startScale, endScale, // Start and end values for the X axis scaling 
       startScale, endScale, // Start and end values for the Y axis scaling 
       Animation.RELATIVE_TO_SELF, 0.5f, // Pivot point of X scaling 
       Animation.RELATIVE_TO_SELF, 0.5f); // Pivot point of Y scaling 
     anim.setFillAfter(true); // Needed to keep the result of the animation 
     anim.setDuration(1000); 
     anim.setRepeatMode(Animation.REVERSE); 
     anim.setRepeatCount(Animation.INFINITE); 
     v.startAnimation(anim); 
    } 

    public void mediaPlayerSetting() { 

     AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
     ringtone = RingtoneManager.getRingtone(getApplicationContext(), notification); 

     if (mySharedPreferences.GetIsSoundEnabled()) // Play sound 
     { 
      int volume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM); 
      if (volume == 0) 
       volume = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM); 
      audioManager.setStreamVolume(AudioManager.STREAM_ALARM, volume, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 

      ringtone = RingtoneManager.getRingtone(getApplicationContext(), notification); 
      if (ringtone != null) { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
        ringtone.setAudioAttributes(new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM).build()); 
       } else { 
        ringtone.setStreamType(AudioManager.STREAM_ALARM); 
       } 
       ringtone.play(); 
      } 

     } 
     if (mySharedPreferences.GetIsVibrationEnabled()) // Start vibration 
     { 
      vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
      vibrator.vibrate(pattern, 0); 
     } 
    } 

    private void setTimer() { 
     handler = new Handler(); 
     runnable = new Runnable() { 
      @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) 
      @Override 
      public void run() { 

       AppGlobal.showNotification(getApplicationContext(), title_tv.getText().toString(), message_tv.getText().toString()); 
       AlarmActivity.this.finish(); 
      } 
     }; 
     handler.postDelayed(runnable, mySharedPreferences.GetAlarmDuration() * 1000); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if (ringtone != null && ringtone.isPlaying()) ringtone.stop(); 
     if (vibrator != null) vibrator.cancel(); 
     handler.removeCallbacks(runnable); 
     screenLock.release(); 
    } 
} 
+0

Если API> = 16, то вы должны попробовать с 'finishAffinity();' – bshears

+0

Пожалуйста, прочитайте [это (как спросить)] (http://stackoverflow.com/help/how-to-ask) и [this (mcve)] (http://stackoverflow.com/help/mcve), прежде чем спрашивать, так как это поможет вам получить больше и лучше ответов от сообщества. Есть слишком много возможностей для этого. Действия не должны быть уничтожены вручную (и не вызывается 'System.exti()'). Покажите методы 'onPause' /' onDestroy' – Bonatti

+0

@bshears, просто попробовал это, без усиления. –

ответ

0

В Android отделки() метод не закрывает приложение, но minizing его

No. Прежде всего, не существует понятия "сведение к минимуму" приложения на Android , и finish() - NOT, закрывающий основной процесс приложения, но только завершивший действие.

+0

Как я могу достичь этого типа сигнала тревоги? , когда пользователь откладывает или отменяет, он должен закрыться. –