2013-01-19 6 views
16

मुझे लगता है कि यह एक बुनियादी सवाल है। इरादे का उपयोग करके गतिविधि को रोकने के लिए कोई विकल्प है।इरादे का उपयोग कर एंड्रॉइड में एक गतिविधि को कैसे रोकें?

Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554")); 
startActivity(intent); 

यह मेरा कोड है। मैं इस गतिविधि को रोकना चाहता हूं (इसका मतलब है, मैं इस कॉल को छोड़ना चाहता हूं) यदि उपयोगकर्ता व्यस्त है या कुछ है। इसके लिए मैं क्या कर सकता हूं? मैंने यह कोशिश की:

if (condition) { 
    Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554")); 
    startActivity(intent); 
}else { 
    this.finish(); 
} 

लेकिन इसका कोई उपयोग नहीं है। क्या किसी के पास कोई सुझाव है?

+1

ऐसा लगता है कि अगर कोई एप्लिकेशन किसी अन्य को मार सकता है तो यह सुरक्षा उल्लंघन होगा। – EJK

+0

बेशक लक्ष्य एप्लिकेशन ने इस इरादे के माध्यम से इस क्षमता को प्रकाशित नहीं किया। – EJK

उत्तर

23

मुझे कुछ दिन पहले यह समस्या थी, और मुझे आपको यह बताने में प्रसन्नता हो रही है कि मुझे इसके आसपास एक रास्ता मिला है।

सबसे पहले, गतिविधि के लिए आप AndroidManifest.xml में इस ऐड बंद करना चाहते हैं:

android:launchMode="singleTop" 

मैं एक चेकबॉक्स उदाहरण का उपयोग करने के लिए जा रहा हूँ। जब यह चेक किया जाता है तो गतिविधि शुरू हो जाती है और जब अनचेक किया जाता है तो गतिविधि को मार डालेगा।

उदाहरण गतिविधि ए गतिविधि बी को कॉल कर रहा है और उसके बाद किसी इरादे का उपयोग कर इसे मार रहा है।

कोड एक में रखा जाना करने के लिए:

boolean keep; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.B); 
    intent = this.getIntent(); 
    boolean keep = intent.getExtras().getBoolean("keep"); 
    if(keep==true) 
    { 
     //execute your code here 

    } 
} 
    @Override 
protected void onNewIntent(Intent intent) 
{ 
    super.onNewIntent(intent); 
    keep = intent.getExtras().getBoolean("keep"); 
    if(keep==false) 
    { 
     B.this.finish(); 
    } 
} 

स्पष्टीकरण:: क्या इस मूल रूप से कार्य करती है, जब चेकबॉक्स चयनित है यह गतिविधि कॉल और

checkbox.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Intent intent = new Intent(A.this, B.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      if (enable.isChecked()) { 
       intent.putExtra("keep", true); 
       startActivity(intent); 
      } 
      else 
      { 
       intent.putExtra("keep", false); 
       startActivity(intent); 
      } 
     } 
    }); 

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

पीएस - आप गतिविधि बी को किसी अन्य गतिविधि से भी बंद कर सकते हैं। बस का उपयोग अन्य गतिविधि सी है:

Intent intent = new Intent(C.this, B.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.putExtra("keep", false); 
startActivity(intent); 
+0

बहुत बहुत धन्यवाद Torcellite !! यह मुझे बहुत मदद कर सकता है। – Tony

+0

@ टोनी किसी भी समय, इसे चलाने के लिए दूसरों को इसे देखने के लिए वोट दें :) –

+0

@ टोनी इसके अलावा, बी में कोड के साथ प्रयोग करें, यह बहुत अच्छा काम नहीं कर सकता है जब तक कि मुझे नहीं पता आप वास्तव में क्या चाहते हैं। –

0

आप Play स्टोर की पृष्ठभूमि डेटा को बंद कर और Play स्टोर .it बस कहेंगे में प्रवेश नहीं करने के लिए सेवाओं खेल सकते हैं, "लोड किया जा नहीं कर सकता" मुझे लगता है कि इरादे को रोकने का एकमात्र तरीका

+0

@ श्री यहाँ लिंक कहां है? –

संबंधित मुद्दे