Android finish()方法没有关闭应用程序但最小化它

时间:2016-12-21 18:54:00

标签: android android-intent android-lifecycle android-alarms activity-lifecycle

我正在使用以下代码从后台服务启动活动:

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

但是当我通过点击确定暂停按钮完成活动时,应用程序不会关闭,而是最小化。
当打开最小化的应用程序时,警报会再次响铃,直到手动关闭应用程序 我也试过按照命令但没有获得。

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();
    }
}

1 个答案:

答案 0 :(得分:0)

  

在Android finish()方法中,不是关闭应用程序而是缩小应用程序

没有。首先,在Android上没有“最小化”应用程序的概念,finish() 关闭主应用程序进程,但只完成了活动。