2012-09-26 18 views
5

मैं गए दो गतिविधियों के साथ एक समस्या यह है कि मैं का समाधान नहीं कर सकते हैं:गतिविधि प्रसारण रिसीवर से शुरू की, के समाप्त हो गया गया है बावजूद हाल ही में कार्यों में रहता है

मैं एक एक गतिविधि है कि अलार्म के साथ कार्यक्रमों एक अलार्म प्रबंधक, 3 सेकंड में अलार्म रिसीवर एक बी गतिविधि लॉन्च करता है जिसमें केवल एक फिनिश बटन होता है।

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

मैंने गतिविधि बी में कोई इतिहास जोड़ने की कोशिश की है, लेकिन समस्या जारी है।

public class ActivityA extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_a); 

    Button b=(Button) findViewById(R.id.initTimer); 
    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      programTimer(); 
     } 
    }); 
} 

private void programTimer() { 
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, AlarmReciver.class); 
    PendingIntent pIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3000 , pIntent); 
} 

}

बी गतिविधि:

यहाँ एक गतिविधि के कोड है

public class ActivityB extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_b); 

    Button button= (Button) findViewById(R.id.bFinish); 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
} 

}

AlarmReciver:

public class AlarmReciver extends android.content.BroadcastReceiver { 
private static final String DEBUG_TAG="ReceptorAlarma"; 
@Override 
public void onReceive(Context context, android.content.Intent intent) {  
    //lanzar activity 
    Intent i = new Intent(context, ActivityB.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i);  
} 

}

मैनिफ़ेस्ट:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".ActivityA" 
     android:label="@string/title_activity_activity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".ActivityB">    
    </activity> 

    <receiver android:name=".AlarmReciver" > 
    </receiver> 
</application> 

अपने समय के लिए धन्यवाद।

उत्तर

1

आप ने लिखा है:

अगर मैं एक से अलार्म प्रबंधक कार्यक्रम और 3 सेकंड बी गतिविधि प्रकट होता है में इस गतिविधि वापस बटन दबाने खत्म,। सब सामान्य

नोट: अब आप 1 चल रहा है काम है जो अपनी जड़ गतिविधि के रूप में ActivityB है की है।

समस्या

निम्नलिखित है: लांचर द्वारा आवेदन करता है, तो मैं फिर से खोलने, प्रणाली एक गतिविधि शुरू होता है,

नोट: जब आप लॉन्चर से आवेदन शुरू इस, गतिविधि ए के साथ अपनी मूल गतिविधि के रूप में एक और कार्य शुरू करता है। अब आप 2 चल रहा कार्य है: रूट के रूप में ActivityA साथ एक और एक ActivityB

साथ ... लेकिन अगर मैं लंबे समय से घर बटन दबाने से आवेदन शुरू हमेशा (हाल ही में प्रयुक्त कार्यों) मैं खुले बी गतिविधि ।

नोट: जब देर तक दबाए घर बटन और हाल ही में प्रयुक्त कार्यों से चुनने के लिए, आप जो अपने रूट के रूप में ActivityB है

मुझे लगता है कि जब जरूरत काम है कि AlarmReciver द्वारा शुरू किया गया चयन कर रहे हैं मैं बी गतिविधि को समाप्त करता हूं, अगर मैं कहीं से एप्लिकेशन को फिर से खोलता हूं, तो एक गतिविधि खुलनी चाहिए।

आप ActivityB के लिए <activity> टैग में निम्न निर्धारित करके व्यवहार आप चाहते हैं पाने के लिए सक्षम होना चाहिए:

android:excludeFromRecents="true" 

यह है कि यह सुनिश्चित करेंगे, जब आप इसके जड़ गतिविधि के रूप में ActivityB साथ कार्य प्रारंभ करें , कार्य हाल के कार्यों की सूची में दिखाया जाएगा। इस तरह, एप्लिकेशन लॉन्च करने का एकमात्र तरीका या तो होम स्क्रीन से होगा, या इसे हालिया कार्यों की सूची से चुनकर (केवल कार्य करेगा जो गतिविधि ए के साथ रूट के रूप में शुरू किए गए थे)।