18

MyApp的的接收器是剛剛工作的罰款,如果它在背景是:清楚最近使用的應用擦拭應用程序的內存和我的接收器停止工作

public class MySmsReceiver extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     System.out.println("triggered sms"); 
     if(intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) { 
      Toast.makeText(context, "message Received", Toast.LENGHT_SHORT).show(); 
    } 
} 

和我的接收機清單文件是

 <receiver android:name=".MySmsReceiver"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 

     </intent-filter> 
    </receiver> 

文件說如果我在清單文件中聲明一個接收器,它應該總是有效。但對我來說這不是......

但每當我通過刷他們清楚我最近使用的應用,它只是停止工作。之後我去任務管理器,發現安裝MyApps forcestop這樣被禁用像下面screenshot of my app in taskmanager

,我想通了一些應用程序,如watsapp和FB始終保持在內存中是說最近明確應用程序的刷卡仍是任務管理器後,這個bcoz有像下面

fb state in task manager

watsapp state in taskmanager

我怎樣才能做到這一點到應用中的followig狀態..什麼會做我的應用程序的行爲像其他的第三方應用程序,如watspp和Facebook ...如何我可以讓我的應用程序在m中嗎?埃默裏總是我問這個那麼只有我的接收器總是工作..如果我錯了,然後給我一個解決方案做到這一點...

我一直在尋找這樣的很多,我仍然無法找到解決辦法..我問錯了嗎?或者真的有辦法做到這一點?請有人幫助我......這讓我一週!希望我在這裏解釋我的問題,如果我不問我我會立即給你回覆。

+1

你在哪個設備上測試過?有些設備強制停止應用程序時,從最近的應用程序列表中清除,除了一些流行的應用程序。 –

+0

Hauwei Honor android版本4.4 –

+0

watsapp仍然是第三方的應用程序,我安裝的只是另一個應用程序,但仍然可以做的伎倆..怎麼樣?我怎樣才能做到這一點?? –

回答

13

在某些華爲設備(和一些LG和小蜜設備),你需要你的應用程序添加到允許在後臺運行的應用程序的列表。如果你不這樣做,一旦你的應用程序停止(通過從最近的任務列表中滑動,或者出於資源原因通過Android查殺應用程序),它將不會自動重新啓動。

在華爲設備上,設置被稱爲「受保護的應用程序」。您無法以編程方式將您的應用添加到「受保護的應用」列表中。你需要告訴用戶,他必須在你安裝你的應用程序後才能做到這一點。知名的應用程序(如WhatsApp,Facebook,Google Mail)由製造商自動添加。

這種行爲在不同的設備上可能會有所不同,它可能會在不同的Android版本上有所不同,如果設備對特定的移動運營商「品牌化」,可能會有所不同,因爲移動運營商也可以修改設置他們自己。

"Protected Apps" setting on Huawei phones, and how to handle it一些更多的細節。

編輯:添加這樣:​​

另外,Android的爆發在Android 4.4系統(奇巧)的行爲「從最近用過刷卡」,它可以使對已經刷卡應用問題。粘性服務不會被延遲,並且廣播Intent不會被傳送。有一些信息有關的解決方法來處理是:In android 4.4, swiping app out of recent tasks permanently kills application with its service . Any idea why?

而且,你從谷歌Play商店安裝應用程式?對於從Play商店安裝的應用程序與本地安裝的應用程序(從下載或通過adb或其他),行爲可能有所不同。

+0

我已經從本地安裝了我的應用程序只有本地...是否有關於Play商店應用程序和本地應用程序的任何文檔? –

+0

不幸的是,這些都沒有記錄在任何地方:-(製造商做什麼他們想和我們其他人一起弄明白。 –

+1

謝謝你..最後你幫我解決了這個問題.. –

0

如果「強制停止」按鈕被禁用,這意味着在概述刷卡應用遠造成您的應用程序被強制停止該設備上。在用戶再次與您的應用程序交互之前,您將不會收到任何廣播。

+0

,但watsapp沒有得到forcestopped ...如果你說它具有一些特殊的權限 –

+1

那麼我怎麼能讓我的應用程序得到那??? –

+0

獲得添加到任何特定的應用程序爲該製造商我猜。但實際上,請在三星的遠程測試實驗室中嘗試一下,看看他們做了什麼,並決定是否可以在某些設備上容忍這種行爲,並在必要時爲用戶發出警告消息。如果應用程序沒有被強制停止,那麼可以按照已發佈的某些鏈接中提到的方法繼續進行。 –

11

看起來像這種情況在少數設備發生(如:小米,榮譽裝置,具有SmartManager功能三星設備等)下應用程序是力停止時,用戶從近期任務的應用程序。

這是因爲這些廠商都在默認情況下其動力停止存儲器/電池管理的應用程序添加的任務管理器功能。但是像Whatsapp,Facebook這樣的應用程序很少。這可能是因爲他們會將最着名的應用程序列入白名單。

通過Android開發者文檔/ UX的建議,可能的解決方法對於這種情況下去,

基於案例小米MIUI設備:

創建UX傳達給用戶啓用「自動」許可您的應用程序。基本上,用戶必須打開「安全」應用程序 - >點擊「權限」 - >點擊「自動啓動」 - >尋找您的應用程序並啓用它。我知道它的荒謬和痛苦,但沒有其他直截了當的選擇。

做上述檢查後,如果製造商是小蜜

String manufacturer = "xiaomi"; 
     if(manufacturer.equalsIgnoreCase(android.os.Build.MANUFACTURER)) { 
      //this will open auto start screen where user can enable permission for your app 
      Intent intent = new Intent(); 
      intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); 
      startActivity(intent); 
     } 

注:這個過程可以是榮譽的設備,三星設備作爲其非常具體的製造商不同。

另外作爲解決這個問題的其他設備的正常方法,是創建一個粘性服務與覆蓋onTaskRemoved方法。 使用下面的代碼:

public class BackgroundService extends Service { 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 

    @Override 
    public void onTaskRemoved(Intent rootIntent) { 
     //create a intent that you want to start again.. 
     Intent intent = new Intent(getApplicationContext(), BackgroundService.class); 
     PendingIntent pendingIntent = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_ONE_SHOT); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 5000, pendingIntent); 
     super.onTaskRemoved(rootIntent); 
    } 
} 

這裏的服務將再次在5秒後開始。您可以將其替換爲任何想要在從最近的應用程序中清除後再次啓動的意圖。

+0

謝謝我的工作,如果它解決了我的問題,我會接受這個答案..謝謝你幫了很多... –

+0

你找到了解決方案嗎?在Mr.Popular – Moorthy

+0

''xiaomi'設備中,當我從最近的任務中kill應用程序 - >'onTaskRemoved','onDestroy'沒有被解僱:( –