2010-07-16 56 views
22

मैंने टोस्ट का उपयोग अधिसूचना करने के लिए किया था, लेकिन ऐसा लगता है कि यह भी दिखाई देगा, इसकी गतिविधि वर्तमान स्क्रीन में नहीं है और कुछ अन्य गतिविधि शुरू हो गई है।यह जांचने के लिए कि क्या मेरी गतिविधि स्क्रीन में चल रही वर्तमान गतिविधि है

मैं इस स्थिति की जांच करना चाहता हूं, जब गतिविधि वर्तमान नहीं है, तो मैं टोस्ट अधिसूचना नहीं भेजूंगा। लेकिन कैसे करना है?

+0

[जांचना कि एक Android आवेदन पृष्ठभूमि में चल रहा] (http के संभावित डुप्लिकेट बुलाया गतिविधि पर बढ़ा रहे हैं: // stackoverflow। कॉम/प्रश्न/3667022/चेक-इन-ए-एंड्रॉइड-एप्लिकेशन-इन-द-बैकग्राउंड) – rds

उत्तर

79

जब आपकी गतिविधि अग्रभूमि में आती है, तो इसकी onResume() विधि लागू की जाएगी। जब आपकी गतिविधि के सामने एक और गतिविधि आती है, तो इसकी onPause() विधि लागू की जाएगी।

private boolean isInFront; 

@Override 
public void onResume() { 
    super.onResume(); 
    isInFront = true; 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    isInFront = false; 
} 
+2

कोई सुविधाजनक तरीका मौजूद है? सक्रियता :: isActive() – virsir

+7

की तरह मैं व्यक्तिगत रूप से इस तरह की विधि में नहीं आया या उपयोग नहीं किया है, लेकिन उपरोक्त समाधान मेरी राय में भी बहुत सुविधाजनक है। –

+0

यह उत्तर एक अधिक कठोर कार्यान्वयन है http://stackoverflow.com/questions/3667022/android-is-plplication-running-in-background/5862048#5862048 – Moak

1

है Activity#isTaskRoot() विधि

+1

गतिविधि चालू होने पर भी यह सच हो जाता है .. कोई उपयोग नहीं! – yahya

+0

मेरे लिए बहुत प्रभावी, उपयोगी .. – AnkitRox

7
ArrayList<String> runningactivities = new ArrayList<String>(); 

ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE); 

List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); 

for (int i1 = 0; i1 < services.size(); i1++) { 
    runningactivities.add(0,services.get(i1).topActivity.toString()); 
} 

if(runningactivities.contains("ComponentInfo{com.app/com.app.main.MyActivity}")==true){ 
    Toast.makeText(getBaseContext(),"Activity is in foreground, active",1000).show(); 
} 

इस तरह अगर उठाई गतिविधि वर्तमान दिख रहा है आपको पता चलेगा: तो तुम सब करने की जरूरत है अपनी गतिविधि को अग्रभूमि में चलने का संकेत एक बूलियन लागू है गतिविधि।

+0

getRunningTasks विधि बहिष्कृत है। और इसे एंड्रॉइड 6 में हटा दिया गया है। – Thirumalvalavan

2

यह मेरा अंतिम है सक्रियता दृश्य कार्य।

protected boolean isActivityVisible() { 
    if (this.mActivity != null) { 
     Class klass = this.mActivity.getClass(); 
     while (klass != null) { 
      try { 
       Field field = klass.getDeclaredField("mResumed"); 
       field.setAccessible(true); 
       Object obj = field.get(this.mActivity); 
       return (Boolean)obj; 
      } catch (NoSuchFieldException exception1) { 
//    Log.e(TAG, exception1.toString()); 
      } catch (IllegalAccessException exception2) { 
//    Log.e(TAG, exception2.toString()); 
      } 
      klass = klass.getSuperclass(); 
     } 
    } 
    return false; 
} 
2

मैं अपने आप को राज्य को संभालना पसंद नहीं करता, इसलिए मैंने एक कक्षा लागू की है जो मेरे लिए यह करती है।

package mypackage; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

// Mine extends AppCompatActivity - your's might need to extend Activity, depending on whether 
// you use the support library or not. 
public class StateTrackingActivity extends AppCompatActivity { 

    public enum ActivityState { 

     CREATED, RESUMED, STARTED, PAUSED, STOPPED, DESTROYED 
    } 

    private ActivityState _activityState; 

    protected ActivityState getActivityState() { return _activityState; } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     _activityState = ActivityState.CREATED; 
    } 

    @Override 
    protected void onResume() { 

     super.onResume(); 
     _activityState = ActivityState.RESUMED; 
    } 

    @Override 
    protected void onStart() { 

     super.onStart(); 
     _activityState = ActivityState.STARTED; 
    } 

    @Override 
    protected void onPause() { 

     super.onPause(); 
     _activityState = ActivityState.PAUSED; 
    } 

    @Override 
    protected void onStop() { 

     super.onStop(); 
     _activityState = ActivityState.STOPPED; 
    } 

    @Override 
    protected void onDestroy() { 

     super.onDestroy(); 
     _activityState = ActivityState.DESTROYED; 
    } 
} 

फिर अपनी गतिविधि यह एक विस्तार कर सकते हैं और आप getActivityState() फोन करके राज्य प्राप्त कर सकते हैं।

1
if (BaseActivity.this instanceof Faq) 
      { 
       Toast.makeText(BaseActivity.this, "You are in the Same Page", Toast.LENGTH_SHORT).show(); 
      }else { 
       Intent intent = new Intent(BaseActivity.this, Faq.class); 
       startActivity(intent); 
       drawer.closeDrawer(GravityCompat.START); 
      } 

//// यहाँ हूँ मेरे सभी गतिविधियों BaseActivity

+1

मेरे लिए काम ... धन्यवाद ... !!! –

-3
if (getActivity() instanceof ManageCardActivity){ 

    // your code 
    } 
संबंधित मुद्दे