2016-07-30 5 views
0

Darf ich fragen, warum mein onResume() DialogInterface Looping nonstop hält? Ich habe Referenz der onResume() von dieser Website: http://pulse7.net/android/android-delete-sms-message-from-inbox-in-android/Android: warum mein onResume() DialogInterface Looping nonstop hält?

@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++;} 
      } 
     } 

Aber wenn ich diesen Teil des Codes hinzufügen, die DialogInterface für "setPositiveButton" hält Looping non-stop. Ich versuche, meine Anwendung so zu konfigurieren, dass sie zur Standardnachrichtenanwendung wird, sodass ich Nachrichten löschen kann. Da es jetzt nicht als Standardanwendung festgelegt ist, kann ich keine Nachrichten erfolgreich löschen. Jede Hilfe wird sehr geschätzt. Danke im Voraus.

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++;} 
      } 
     } 
    } 


} 
+0

ich verwechselt werden könnte, aber wenn ein Dialog gezeigt wird, glaube ich onPause wird auf die Aktivität aufgerufen, was bedeuten würde, wenn Sie den Dialog onResume wird aufgerufen wird. Edit: sorry, ich dachte dialogFragment, und ich glaube, ich liege falsch, – ziondreamt

Antwort

2

Sie verwenden die Variable i als Flag, aber wenn Sie Ihre App öffnen der Wert i wird wieder 0 sein. Sie sollten Ihre Flagge in einer persistenten Datenbank speichern. Verwenden Sie entweder SQLite, um i festzulegen, oder verwenden Sie eine andere Methode, z. B. eine Datei erstellen, wenn der Benutzer Ja zu Ihrer Frage sagt, und überprüfen Sie dann, ob die Datei vorhanden ist oder nicht. Wenn Sie nicht verstehen, was ich Ihnen gesagt habe, kann ich Ihnen ein paar Codeschnipsel schicken.

OK, ich nehme an, Sie i als Flag verwenden, um zu überprüfen, ob Benutzer Ihre App als Standard oder nicht festgelegt hat, so schlage ich vor, Sie SharedPreferences zu verwenden, um den Wert von i zu speichern, damit Sie später den Wert überprüfen von i in einer besseren Weise. Fügen Sie den folgenden Code in Ihrer onResume Funktion:

sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);   
SharedPreferences.Editor editor = sharedpreferences.edit(); 

Statt i++ Verwendung:

editor.putInt(i, 1); 
editor.commit(); 

Und wenn i==0 Gebrauch zu überprüfen:

int check =sharedprferences.getInt(i); 
if(check == 0) {...........} 
+0

Macht es Ihnen etwas schicken mir Code-Schnipsel? Ich habe versucht, eine Datei unter Werten/bools erstellen: ' true ' und manifestiert: '< Aktivität android: name = ". Activity.ActivityMain_txt" android: enabled = "@ bool/is_kitkat"> 'scheint, als könnte ich nicht erreichen, was ich will. – Apple

+0

ok, ich nehme an, dass Sie i als Flag verwenden, um zu überprüfen, ob der Benutzer Ihre App als Standard festgelegt hat oder nicht. also schlage ich vor, dass Sie sharedpreferences verwenden, um vakue von i zu speichern, damit Sie später Wert von i in einer besseren Weise überprüfen können. füge folgenden Code in deine onResume-Funktion ein sharedpreferences = getSharedPreferences (MyPREFERENCES, Context.MODE_PRIVATE); –

+0

Es funktioniert. Vielen Dank. Aber noch 1 Frage .. Siehe unten. – Apple