Android:为什么我的onResume()DialogInterface不停循环?

时间:2016-07-30 07:04:49

标签: java android dialog infinite-loop onresume

请问为什么我的onResume()DialogInterface会不停地循环?我从这个网站引用了onResume():http://pulse7.net/android/android-delete-sms-message-from-inbox-in-android/

 @Override
    protected void onResume() {
        super.onResume();            int i=0;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            if(i==0) {
            if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) {
                AlertDialog.Builder builder = new AlertDialog.Builder(ActivityMain_txt.this);
                builder.setMessage("This app is not set as your default messaging app. Do you want to set it as default?")
                        .setCancelable(false)
                        .setTitle("Alert!")
                        .setNegativeButton("No", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        })

                        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                            @TargetApi(19)
                            public void onClick(DialogInterface dialog, int id) {
                                Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
                                intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName());

                               startActivity(intent);
                                dialog.dismiss();

                            }

                        });
                builder.show();


                i++;}
            }
        }

但是当我添加这部分代码时,“setPositiveButton”的DialogInterface会不停地循环。我试图将我的应用程序设置为默认的消息应用程序,因此我将能够删除消息。由于现在它未设置为默认应用程序,因此无法成功删除任何消息。任何帮助将深表感谢。提前谢谢。

import android.annotation.TargetApi;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import android.provider.Telephony;
import com.example.apple.qs.Activity.db.Constant;
import com.example.apple.qs.Activity.db.DatabaseHandler_txt;
import com.example.apple.qs.Activity.fragment.ContactFragment;
import com.example.apple.qs.Activity.fragment.FragmentAdapter;
import com.example.apple.qs.Activity.fragment.MessageFragment;
import com.example.apple.qs.Activity.db.model.Message;
import com.example.apple.qs.Activity.db.Store.ContactStore;
import com.example.apple.qs.Activity.db.Store.MessageStore;
import java.util.ArrayList;
import com.example.apple.qs.Activity.R;
import java.util.List;

public class ActivityMain_txt extends AppCompatActivity {



    private ActionBarDrawerToggle mDrawerToggle;
    private Toolbar toolbar;
    private DrawerLayout drawerLayout;
    public static MessageFragment f_message;
    private ContactFragment f_contact;
    public FloatingActionButton fab;

    private Toolbar searchToolbar;
    private boolean isSearch = false;
    private ViewPager viewPager;
    private DatabaseHandler_txt db;

    public ContactStore contacsStore;
    public MessageStore messageStore;
    public static List<Message> messageList = new ArrayList<>();

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



        setupDrawerLayout();

        db  = new DatabaseHandler_txt(getApplicationContext());

        toolbar = (Toolbar) findViewById(R.id.toolbar_viewpager);
        searchToolbar = (Toolbar) findViewById(R.id.toolbar_search);
        fab = (FloatingActionButton) findViewById(R.id.fab);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), ActivityNewMessage_txt.class);
                startActivity(i);
            }
        });

        //initToolbar();
        prepareActionBar(toolbar);

        contacsStore = new ContactStore(getApplicationContext());
        messageStore = new MessageStore(ActivityMain_txt.this);
        messageList = messageStore.getAllconversation();

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        if (viewPager != null) {
            setupViewPager(viewPager);
        }

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {

                closeSearch();
                viewPager.setCurrentItem(tab.getPosition());
                if (tab.getPosition() == 0) {
                    fab.show();
                } else {
                    fab.hide();
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }

        });

        // for system bar in lollipop
        Window window = this.getWindow();

        if (Constant.getAPIVerison() >= 5.0) {
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimaryDark));
        }
    }


    private void setupViewPager(ViewPager viewPager) {
        FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager());

        if (f_message == null) {
            f_message = new MessageFragment();
        }

        if (f_contact == null) {
            f_contact = new ContactFragment();
        }

        adapter.addFragment(f_message, "MESSAGE");
        adapter.addFragment(f_contact, "CONTACT");

        viewPager.setAdapter(adapter);
    }

    private void prepareActionBar(Toolbar toolbar) {
        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(getResources().getColor(isSearch ? android.R.color.darker_gray : R.color.colorPrimary));
        }
        if (!isSearch) {
            settingDrawer();
        }
    }

    private void settingDrawer() {
        mDrawerToggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close ) {
            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
            }

            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
            }
        };
        // Set the drawer toggle as the DrawerListener
        drawerLayout.setDrawerListener(mDrawerToggle);
    }

    private void setupDrawerLayout() {
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        NavigationView view = (NavigationView) findViewById(R.id.nav_view);
        view.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                menuItem.setChecked(true);
                drawerLayout.closeDrawers();
                actionDrawerMenu(menuItem.getItemId());
                return true;
            }
        });
    }

    private void actionDrawerMenu(int itemId) {
        switch (itemId) {
            case R.id.nav_notif:
                Intent i = new Intent(getApplicationContext(), ActivityNotificationSettings_txt.class);
                startActivity(i);
                break;
            case R.id.nav_rate:
                Uri uri = Uri.parse("market://details?id=" + getPackageName());
                Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
                try {
                    startActivity(goToMarket);
                } catch (ActivityNotFoundException e) {
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
                }
                break;
            case R.id.nav_about:
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("About");
                builder.setMessage(getString(R.string.about_text));
                builder.setNeutralButton("OK", null);
                builder.show();
                break;
        }
    }


    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (!isSearch) {
            mDrawerToggle.onConfigurationChanged(newConfig);
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(isSearch ? R.menu.menu_search_toolbar_txt : R.menu.menu_main_txt, menu);
        if (isSearch) {
            //Toast.makeText(getApplicationContext(), "Search " + isSearch, Toast.LENGTH_SHORT).show();
            final SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView();
            search.setIconified(false);
            if (viewPager.getCurrentItem() == 0) {
                search.setQueryHint("Search message...");
            } else {
                search.setQueryHint("Search contact...");
            }
            search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String s) {
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String s) {
                    if (viewPager.getCurrentItem() == 0) {
                        f_message.mAdapter.getFilter().filter(s);
                    } else {
                        f_contact.mAdapter.getFilter().filter(s);
                    }
                    return true;
                }
            });
            search.setOnCloseListener(new SearchView.OnCloseListener() {
                @Override
                public boolean onClose() {
                    closeSearch();
                    return true;
                }
            });
        }
        return super.onCreateOptionsMenu(menu);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
            case R.id.action_search: {
                isSearch = true;
                searchToolbar.setVisibility(View.VISIBLE);
                prepareActionBar(searchToolbar);
                supportInvalidateOptionsMenu();
                return true;
            }
            case android.R.id.home:
                closeSearch();
                return true;
            case R.id.action_refresh: {
                if(viewPager.getCurrentItem()==0){
                    new RefreshMessage().execute("");
                }else{
                    new RefreshContact().execute("");
                }
            }
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    private void closeSearch() {
        if (isSearch) {
            isSearch = false;
            if (viewPager.getCurrentItem() == 0) {
                f_message.mAdapter.getFilter().filter("");
            } else {
                f_contact.mAdapter.getFilter().filter("");
            }
            prepareActionBar(toolbar);
            searchToolbar.setVisibility(View.GONE);
            supportInvalidateOptionsMenu();
        }
    }





    private ChangeObserver changeObserver;
    // wil update only when there a change
    private class ChangeObserver extends ContentObserver {
        public ChangeObserver() {
            super(new Handler());
        }

        @Override
        public void onChange(boolean selfChange) {
            try{
                if(!loadRunning) {
                    loadRunning = true;
                    changeLoad = new ChangeLoad();
                    changeLoad.execute("");
                }
            }catch (Exception e){

            }

        }
    }

    private ChangeLoad changeLoad;
    private boolean loadRunning = false;

    private class ChangeLoad extends AsyncTask<String, String, String>{

        @Override
        protected String doInBackground(String... strings) {
            messageStore.update();
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            loadRunning = false;
            messageList = messageStore.getAllconversation();
            f_message.bindView();
            super.onPostExecute(s);
        }
    }

    public class RefreshMessage extends AsyncTask<String, String, String>{

        @Override
        protected void onPreExecute() {
            f_message.onRefreshLoading();
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... strings) {
            try {
                Thread.sleep(100);
                messageStore = new MessageStore(ActivityMain_txt.this);
                messageList = messageStore.getAllconversation();
            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            f_message.onStopRefreshLoading();
            super.onPostExecute(s);
        }
    }

    private class RefreshContact extends AsyncTask<String, String, String>{

        @Override
        protected void onPreExecute() {
            f_contact.onRefreshLoading();
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... strings) {
            try {
                Thread.sleep(10);
                db.truncateDB();
                contacsStore = new ContactStore(getApplicationContext());
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            f_contact.onStopRefreshLoading();
            super.onPostExecute(s);
        }
    }
    String myPackageName= getPackageName();


    @Override
    protected void onResume() {
        super.onResume();            int i=0;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            if(i==0) {
            if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) {
                AlertDialog.Builder builder = new AlertDialog.Builder(ActivityMain_txt.this);
                builder.setMessage("This app is not set as your default messaging app. Do you want to set it as default?")
                        .setCancelable(false)
                        .setTitle("Alert!")
                        .setNegativeButton("No", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        })

                        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                            @TargetApi(19)
                            public void onClick(DialogInterface dialog, int id) {
                                Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
                                intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName());

                               startActivity(intent);
                                dialog.dismiss();

                            }

                        });
                builder.show();


                i++;}
            }
        }
    }


}

1 个答案:

答案 0 :(得分:1)

您使用变量i作为标记,但每当您打开应用时,i的值将再次为0。您应该将标志存储在持久数据库中。使用SQLite设置i或使用任何其他方法,例如当用户对您的问题说“是”时创建文件,然后检查文件是否存在。如果你不明白我告诉你的内容,我可以给你发一些代码片段。

好的,我假设您使用i作为标记来检查用户是否将您的应用设置为默认值,因此我建议您使用SharedPreferences来存储{{1}的值以后,您可以更好地检查i的值。在i函数中添加以下代码:

onResume

而不是sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedpreferences.edit(); 使用:

i++

并检查editor.putInt(i, 1); editor.commit(); 是否使用:

i==0