5

खोलने में अंतर मैं तीन गतिविधि है: - SplashActivity - MainActivity -, PlayerActivity"घर" बटन पुश करके और एक अन्य गतिविधि

पाठ्यक्रम एप्लिकेशन SplashActivity साथ शुरू होता है के

तो यह MainActivity शुरू होता है और बंद कर देता है। कुछ पल में MainActivity PlayerActivity शुरू होता है और backstack को जाता है। (MainActivity जीवित है लेकिन है onStop) तो मैं पृष्ठभूमि के लिए खुला MainActivity और PlayerActivity सेट (PlayerActivity जीवित है लेकिन है onStop) की जरूरत है। तब मैं खुले PlayerActivity फिर से की जरूरत है और पृष्ठभूमि के लिए MainActivity निर्धारित किया है।

तो PlayerActivity और MainActivity अक्सर हो जाता है onPause() और onStop() OnDestroy बिना जब एप्लिकेशन स्विच एक से दूसरे और वापस।

मुझे सभी गतिविधियों को पूरा करने की आवश्यकता है और जब भी उपयोगकर्ता "घर" बटन दबाएगा तो स्पलैशएक्टिविटी के लिए ऐप शुरू करें, लेकिन होम बटन गतिविधियों (ऑन पॉज़() और ऑनस्टॉप()) के बीच स्विच की तरह ही बनाता है। इसलिए मैं गतिविधियों को मारने के लिए अंतर नहीं पकड़ सकता।

कृपया मदद करें।

संपादित: दुर्भाग्य से, onUserLeaveHint मदद नहीं करता है, यह एक ही है। उपयोगकर्ता गृह धक्का अगर यह कहता है:

onUserInteraction, onUserLeaveHint, onPause, onStop

इस गतिविधि के बिना किसी भी उन कार्यों पिछले गतिविधि (मुख्य) लौट आते हैं।

सार्वजनिक वर्ग PlayerActivity गतिविधि {

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

    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      startActivity(new Intent(PlayerActivity.this, MyActivity.class)); 
     } 
    }, 5000); 
} 

}

फैली लेकिन फिर भी एक ही है:

onUserInteraction, onUserLeaveHint, onPause, onStop

+0

ड्रॉप 'SplashActivity है ', अगर आप इसमें कुछ भी नहीं करते हैं। –

+1

ठीक विपरीत, ऐप स्पलैशएक्टिविटी में बहुत कुछ करता है, इसलिए मुझे इसकी आवश्यकता है, और मुझे किसी भी समय स्पलैशएक्टिविटी शुरू करने की आवश्यकता है जब उपयोगकर्ता होम-बटन के साथ ऐप को पतन करता है। –

उत्तर

2

मेरे ज्ञान के लिए, होम बटन को ओवरराइड करने या होम बटन प्रेस ईवेंट सुनने के लिए कोई रास्ता नहीं है। -> अपने गतिविधियों में से एक दिखा रहा है

  • अपने क्रियाएँ में से कोई भी दिखा रहे हैं:

    हालांकि, अपने लक्ष्य को आवेदन जानते हैं और कार्यवाही करते निम्नलिखित होता है।

जब ऐसा होता है, तो आप एक स्पलैश संवाद दिखाना चाहते हैं।

आप ट्रैक कर सकते हैं कि उपयोगकर्ता आपके एप्लिकेशन में कब होता है और जांचता है कि उपयोगकर्ता आपके एप्लिकेशन के भीतर से आपकी गतिविधि में नेविगेट किया गया है या नहीं।

अद्यतन: नीचे दी गई उदाहरणों के रूप में सभी क्रियाकलापों को संशोधित करने के बजाय, आप ActivityLifecycleCallbacks ऑब्जेक्ट का उपयोग कर सकते हैं ताकि यह पता चल सके कि आपकी किसी भी गतिविधि के जीवन चक्र कॉलबैक कहलाए जाते हैं। आप मेरा उदाहरण ले सकते हैं और इसे संशोधित कर सकते हैं। मेरा मानना ​​है कि ActivityLifecycleCallbacks.onActivityStarted() को super.onStart() कॉल के बाद बुलाया जाता है, इसलिए आपको Activity.romStart() में super.onStart() को कॉल करने से पहले आया थाप्रोमैप एप्लिकेशन() को जांचना होगा। यह त्रुटि से कम प्रवण है और कम कोड की आवश्यकता है।

संशोधित How to check if activity is in foreground or in visible background? इस सवाल

उदाहरण लागू कस्टम आवेदन वर्ग फिट करने के लिए:

public class MyApplication extends Application { 

    public static boolean cameFromMyApplication() { 
    return count != 0; 
    } 

    public static void activityStarted() { 
    count++; 
    } 

    public static void activityStopped() { 
    count--; 
    } 

    private static int count; 
} 

AndroidManifest में आपके आवेदन वर्ग रजिस्टर।xml:

<application 
    android:name="your.app.package.MyApplication" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" > 

परियोजना में हर गतिविधि के लिए onStart और onStop जोड़े (यदि आप चाहते हैं आप अपने गतिविधियों के लिए एक आम पूर्वज बना सकते हैं):

@Override 
protected void onStart() { 
    super.onStart(); 
    //Do not include this check in the splash screen Activity 
    if(!MyApplication.cameFromMyApplication()) { 
    //User arrived from outside the application 
    //Application specific code (clear Activity backstack & show splash screen in your case) 
    } 
    MyApplication.activityStarted(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    MyApplication.activityStopped(); 
} 
+0

से ऊपर देखें, मैं ऐसा नहीं देख रहा हूं, लेकिन यह केवल वही काम करता है जो काम करता है। बहुत धन्यवाद! –

+0

ग्रेट। ध्यान देने योग्य एक बात: आपको गतिविधि को कॉल करने की आवश्यकता है स्टार्ट/गतिविधि सभी गतिविधियों में बंद हो गई है। मैंने जवाब अपडेट किया। – vman

+0

धन्यवाद, मेरे लिए सही काम करता है। – jose920405

1

आप एक overridable onUserLeavesHint() समारोह, कि अपनी स्थिति में पर्याप्त हो सकता है के साथ "होम बटन को क्लिक" पकड़ कर सकते हैं।

http://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()

संरक्षित शून्य onUserLeaveHint()

गतिविधि जीवन चक्र के हिस्से के रूप कहा जाता है से

@Override 
public void onUserLeaveHint() { 
    super.onUserLeaveHint(); 
    // Do your thing 
} 

प्रलेखन एक गतिविधि करने के बारे में है जब उपयोगकर्ता पसंद के परिणाम के रूप में पृष्ठभूमि में जाने।उदाहरण के लिए, जब उपयोगकर्ता होम कुंजी दबाता है, तो यूसर लाइवहिंट() पर कॉल किया जाएगा, लेकिन जब आने वाली फ़ोन कॉल इन-कॉल गतिविधि को स्वचालित रूप से अग्रभूमि में लाया जाता है, तो यूसरलेवहिंट() पर नहीं होगा गतिविधि बाधित हो रही है। मामलों में जब इसे लागू किया जाता है, इस विधि को गतिविधि के ऑन पॉज़() कॉलबैक से ठीक पहले कहा जाता है।

यह कॉलबैक और ऑनयूसर इंटरैक्शन() गतिविधियों को की मदद करने के उद्देश्य से बुद्धिमानी से स्टेटस बार नोटिफिकेशन प्रबंधित करना है; विशेष रूप से, के लिए गतिविधियों को एक अधिसूचना रद्द करने के लिए उचित समय निर्धारित करने में मदद करता है।

+0

tnx, लेकिन दुर्भाग्यवश यह मदद नहीं की, कृपया मेरे संपादन को –

1

आप इसे इस तरह देख सकते हैं:

ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
    // check if home was pressed 
    if (tasks.get(0).topActivity.getPackageName().equals("com.android.launcher")) { 
     // HOME button pressed 
    } else { 
     // RECENT APPS pressed (you can listen for the key event before) 
     // activity with FLAG_ACTIVITY_NEW_TASK started 
     // etc. 
    } 
0

मैं ungalcrys द्वारा प्रदान की एक ऐसी ही समस्या का समाधान और कोड के लिए देख रहा था ऊपर इसलिए यहाँ सही दिशा में मुझे डाल किसी को भी समस्या के लिए और के लिए एक अधिक सार्वभौमिक समाधान इसकी आवश्यकता है कि

@Override 
protected void onStop() { 
     super.onStop(); 

     ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
     List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); 

     // check if the app is still visible 
     if (!tasks.get(0).topActivity.getPackageName().equals(getPackageName())) { 
      // for some reason(HOME, BACK, RECENT APPS, etc.) the app is no longer visible 
      // do your thing here 
      } else { 
      // app is still visible, switched to other activity 
     } 
    } 
संबंधित मुद्दे