从主屏幕退出应用程序并关闭它

时间:2015-09-16 10:47:13

标签: android forceclose dynamic-splash-screen

如果没有可用的互联网连接或由于响应错误而发生任何错误,我想在显示消息后自动从启动画面关闭我的应用程序。我的代码关闭了应用程序,但无法关闭启动画面。印度(TOI)应用程序的时间就是这样的。如何实现此功能。

我的启动画面活动是这样的..

public class SplashScreen extends Activity {

// Splash screen timer
private static int SPLASH_TIME_OUT = 8000;
static String MENU = null;
ArrayList<String> ls = new ArrayList<String>();
private String[] categoryType;
private boolean flag = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    // requesting data for menu items in navigation drawer 

    String url = "http://guwahatinow.com/?json=get_category_index";
    if (isOnline()) {
        JsonObjectRequest jsonObjReqMenu = new JsonObjectRequest(Method.GET,
                url, null, new Response.Listener<JSONObject>() {

            public void onResponse(JSONObject response) {
                try {
                    JSONArray jsonArrayMenu= response.getJSONArray("categories");
                    Log.d("request", "menu");
                    int loop;
                    ls.add("Top Stories");
                    for (loop = 0; loop <jsonArrayMenu.length() ; loop++) {

                        JSONObject jsonObj = (JSONObject) jsonArrayMenu.get(loop);
                        String category =jsonObj.getString("title") ;
                        //menu.add(category);
                        ls.add(loop+1, category);
                        Log.d("menu added", category);
                        Log.d("element in ls", ls.get(loop));
                    }

                    ls.add("Exit");

                    int i = ls.size();
                    categoryType = new String[i];
                    for (int j = 0; j < i; j++) {
                        categoryType[j] = ls.get(j);
                    }

                }catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        },  
        new Response.ErrorListener()  {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(), "Please check your internet connection and try again...", Toast.LENGTH_LONG).show();
                VolleyLog.d("menu error", "Error: " + error.getMessage());
                flag = false;
                //finish();
                android.os.Process.killProcess(android.os.Process.myPid());
                System.exit(0);
                //System.exit(0);

            }
        });


        RequestQueue menuQueue = Volley.newRequestQueue(this);
        menuQueue.add(jsonObjReqMenu);

        if (flag) {
            new Handler().postDelayed(new Runnable() {

                /*
                 * Showing splash screen with a timer. This will be useful when you
                 * want to show case your app logo / company
                 */


                @Override
                public void run() {
                    // This method will be executed once the timer is over
                    // Start your app main activity

                    Intent i = new Intent(SplashScreen.this, MainActivity.class);
                    i.putExtra(com.hamburger.menu.SplashScreen.MENU, categoryType);
                    startActivity(i);

                    Log.d("main activity called", "true");
                    // close this activity
                    finish();
                }
            }, SPLASH_TIME_OUT);

        } else {
            Toast.makeText(getApplicationContext(), "Internet connection error...", Toast.LENGTH_LONG).show();
            finish();
            System.exit(0);
        }
        /*new Handler().postDelayed(new Runnable() {


         * Showing splash screen with a timer. This will be useful when you
         * want to show case your app logo / company



            @Override
            public void run() {
                // This method will be executed once the timer is over
                // Start your app main activity

                Intent i = new Intent(SplashScreen.this, MainActivity.class);
                i.putExtra(com.hamburger.menu.SplashScreen.MENU, categoryType);
                startActivity(i);

                Log.d("main activity called", "true");
                // close this activity
                finish();
            }
        }, SPLASH_TIME_OUT);*/

    } else {
        Toast.makeText(getApplicationContext(), "Please connect to internet...", Toast.LENGTH_LONG).show();

    }
}

protected boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    } else {
        return false;
    }
}

}

3 个答案:

答案 0 :(得分:0)

当您的案例中没有可用的连接或您要关闭应用的任何其他位置时,在活动上调用完成()方法。

答案 1 :(得分:0)

在if块的其他主要块中检查互联网调用finish()方法。例如

您的代码为

if (isOnline()) {

//  your Code for calling API and starting timer 

} else {
  Toast.makeText(getApplicationContext(), "Please connect to internet...", Toast.LENGTH_LONG).show();
}

将其更改为

if (isOnline()) {

//  your Code for calling API and starting timer 

} else {
  Toast.makeText(getApplicationContext(), "Please connect to internet...", Toast.LENGTH_LONG).show();
  finish();
}

答案 2 :(得分:0)

您好请使用以下代码替换您的代码,使用处理程序线程

CountDownTimer m_countDownTimer;
m_countDownTimer = new CountDownTimer(8000,1000) {
            @Override
            public void onTick(long millisUntilFinished)
            {

            }

            @Override
            public void onFinish()
            {
                if(!isFinishing())
                {
                    Intent i = new Intent(SplashScreen.this, MainActivity.class);
                    i.putExtra(com.hamburger.menu.SplashScreen.MENU, categoryType);
                    startActivity(i);

                    finish();
                }
            }
        }.start();

取消OnDestroy()

中的CountDownTimer对象
@Override
    protected void onDestroy()
    {
        if(m_countDownTimer != null)
        {
            m_countDownTimer.cancel();
        }
        super.onDestroy();
    }