2013-08-16 5 views
12

मैं देख रहा हूं कि मेरा एंड्रॉइड ऐप अग्रभूमि में कैसे चल रहा है।फोरग्राउंड ऐप को 24/7 कैसे चलाना है?

(HDMI टीवी स्टिक) यह एक निजी तौर पर वितरित एप्लिकेशन हो जाएगा, तो मुझे यकीन है कि यह डिवाइस पर लगातार चलाने के लिए कुछ भी संभव कर सकते हैं

तो, मुझे यकीन है कि एप्लिकेशन कोई बात नहीं चल रहा है रहता है कि कर सकते हैं क्या? संसाधन उपयोग के संदर्भ में ऐप बहुत हल्का वजन है, इसलिए इसे 24/7 चलाने के लिए उम्मीद की जानी चाहिए कि समस्या नहीं है।

मैनिफेस्ट में लगातार पैरामीटर के बारे में पढ़ता हूं, लेकिन ऐसा लगता है कि यह केवल सिस्टम ऐप्स पर लागू हो सकता है?

क्या मुझे अपना ऐप सिस्टम ऐप बनाना चाहिए? मैं यह कैसे करूँगा और इससे मदद मिलेगी?

+0

:

//Your activity @Override public void onPause() { super.onPause(); if (yourservice != null) { yourservice.validateActivityOnPause(); } } 

और validateActivityOnPause() में की तरह कुछ है। आप अपने ऐप को होम स्क्रीन प्रतिस्थापन बनाने की सोच सकते हैं, जैसे कियोस्क मोड एप्लिकेशन। मेरा जवाब देखें [यहां] (http://stackoverflow.com/questions/16657300/disable-all-home-button-and-task-bar-features-on-nexus-7/16657359#16657359)। – TronicZomB

उत्तर

1

उपयोग करें:

import android.os.PowerManager; 

public class MyActivity extends Activity { 

    protected PowerManager.WakeLock mWakeLock; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(final Bundle icicle) { 
     setContentView(R.layout.main); 

     /* This code together with the one in onDestroy() 
     * will make the screen be always on until this Activity gets destroyed. */ 
     final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); 
     this.mWakeLock.acquire(); 
    } 

    @Override 
    public void onDestroy() { 
     this.mWakeLock.release(); 
     super.onDestroy(); 
    } 
} 

और प्रकट में:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

यहाँ देखा: How do I keep the screen on in my App?

+1

ओपी के बाद यह नहीं था। वह अपने ऐप को स्थायी रूप से चलाना चाहता है, यह सिर्फ ऐप चल रहा है, जबकि यह स्क्रीन चालू रहेगा लेकिन डिवाइस के उपयोगकर्ता अन्य ऐप्स – Boardy

+0

पर जा सकेंगे लेकिन एक बार यह चलने के बाद, इसे अंतहीन रूप से चलाना चाहिए? अन्यथा यदि यह अग्रभूमि में नहीं है तो ऐप शुरू करने के लिए ऑनडेस्ट्रॉय और कुछ प्रसारण रिसीवर को संभालने का विकल्प हो सकता है। – Thkru

+0

घर बटन दबाकर और फिर डिवाइस पर इंस्टॉल किए जा सकने वाले अन्य ऐप्स का उपयोग करने पर उपयोगकर्ता को रोकना कुछ भी नहीं होगा, इसलिए ओपी ऐप को पृष्ठभूमि में डालना होगा। – Boardy

2

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

जैसा कि बताया गया है कि आप इसे एक सिस्टम ऐप बना सकते हैं, लेकिन मुझे लगता है कि आपको डिवाइस को रूट करने या अपने स्वयं के रोम बनाने और अपने ऐप को रोम का हिस्सा बनाने की आवश्यकता है। शायद आपकी जरूरतों के लिए सबसे अच्छा समाधान नहीं है, हालांकि कुछ लोग अपने डिवाइस पर रोम को फ्लैश करने में सक्षम होंगे।

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

+1

की आवश्यकता होती है तो ऐप अभी भी बंद हो सकता है कुछ ओपी भी ध्यान में रखना चाह सकता है कि कस्टम के साथ बूट के बाद समस्याएं कम थीं (मैंने कम से कम किया) घर प्रतिस्थापन। [यही वह है जिसे मैंने अनुभव किया और मैंने इसे कैसे ठीक किया।] (Http://stackoverflow.com/questions/17372781/home-launcher-issue-with-fragments-after-reboot) – TronicZomB

12
  • आप एक बाहरी अनुप्रयोग उपयोग करना चाहते हैं: Autostart and StaY!

  • आपको बस इतना करना इस प्रोग्राम के रूप में आप एक सेवा करता है, तो अपने अनुप्रयोग अग्रभूमि में चल रही चुनाव हर "x" मिलीसेकेंड देखने के लिए उपयोग कर सकते हैं चाहते हैं। यदि ऐसा नहीं है, तो यह आपके ऐप को अग्रभूमि में शुरू/लाएगा। इस तरह करें:

    public class PersistService extends Service { 
    
        private static final int INTERVAL = 3000; // poll every 3 secs 
        private static final string YOUR_APP_PACKAGE_NAME = "YOUR_APP_PACKAGE_NAME"; 
    
        private static boolean stopTask; 
        private PowerManager.WakeLock mWakeLock; 
    
        @Override 
        public void onCreate() { 
         super.onCreate(); 
    
         stopTask = false; 
    
         // Optional: Screen Always On Mode! 
         // Screen will never switch off this way 
         mWakeLock = null; 
         if (settings.pmode_scrn_on){ 
          PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
          mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "a_tag"); 
          mWakeLock.acquire(); 
         } 
    
         // Start your (polling) task 
         TimerTask task = new TimerTask() { 
          @Override 
          public void run() { 
    
           // If you wish to stop the task/polling 
           if (stopTask){ 
            this.cancel(); 
           } 
    
           // The first in the list of RunningTasks is always the foreground task. 
           RunningTaskInfo foregroundTaskInfo = activityManager.getRunningTasks(1).get(0); 
           String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName(); 
    
           // Check foreground app: If it is not in the foreground... bring it! 
           if (!foregroundTaskPackageName.equals(YOUR_APP_PACKAGE_NAME)){ 
            Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(YOUR_APP_PACKAGE_NAME); 
            startActivity(LaunchIntent); 
           } 
          } 
         }; 
         Timer timer = new Timer(); 
         timer.scheduleAtFixedRate(task, 0, INTERVAL); 
        } 
    
        @Override 
        public void onDestroy(){ 
         stopTask = true; 
         if (mWakeLock != null) 
          mWakeLock.release(); 
         super.onDestroy(); 
        } 
    } 
    

ऊपर कोड भी "विकल्प" हमेशा पर रहने के लिए मजबूर करने के लिए स्क्रीन है!बेशक आप निम्न अनुमतियों की आवश्यकता होगी:

<uses-permission android:name="android.permission.GET_TASKS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

और भी अपने सेवा रजिस्टर करने के लिए मत भूलना:

<service android:name="YOURPACAKGE.PersistService" 
    android:enabled="true"/> 
+0

अच्छा जवाब, तो इस तरह से ऐप चल रहा है भले ही यह अदृश्य हो (एक और ऐप खुला है)? – Dania

+1

Thx। यदि यह पृष्ठभूमि में चल रहा है या नहीं चल रहा है, तो यह इसे पुनर्स्थापित करेगा, यानी इसे अग्रभूमि में लाएं। – Tanasis

+0

अच्छा जवाब, लेकिन: ईमेल सूचना प्राप्त करते समय मेरी एकमात्र समस्या है, उदाहरण के लिए, मैं ईमेल का चयन कर सकता हूं और इसे अग्रभूमि ऐप मिल जाता है। मैं इसे कैसे अक्षम करता हूं? – Meir

0

आप अपने ऐप के एक लांचर बन कर सकता है <intent-filter> में 2 निम्नलिखित श्रेणी टैग जोड़कर, टैग:

<category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.HOME"/> 

तो आप हमेशा वहाँ शीर्ष पर एक और एप्लिकेशन रन हमारे एप्लिकेशन के लिए सीधी उपयोगकर्ता के लिए कोड निम्नलिखित चलाने अगर जांच होनी चाहिए:

Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(startMain); 

मैंने इस समाधान की कोशिश की है, लेकिन यह फेसबुक मैसेंजर चैट हेड की तरह शीर्ष पर खींचे जाने वाले ऐप्स को छुपा नहीं सकता है।

0

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

//Your service 

public void validateLynxActivityOnPause() { 
    //Do some stuff here 

    Intent startActivityIntent = new Intent(this, LynxActivity.class); 
    startActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    this.startActivity(startActivityIntent); 
} 
संबंधित मुद्दे