Қолданба жабық болғанда Android BOOT_COMPLETED алынбады

Мен бұл сұрақтың сайтта көп сұралғанын білемін, бірақ шешім таба алмаймын. Бағдарлама іске қосылмаған кезде менің BOOT_COMPLETED қабылдағыш шақырылмайды.

Манифест:


    
    

    
        
            
                
                
            
        

        
            
                
            
        
    

StartUpBootReceiver:

public class StartUpBootReceiver  extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.d("startuptest", "StartUpBootReceiver " + intent.getAction());

        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
            Log.d("startuptest", "StartUpBootReceiver BOOT_COMPLETED");
        }
    }
}

Қолданба іске қосылған болса және қоңырауды имитациялаймын

adb shell
am broadcast -a android.intent.action.BOOT_COMPLETED

Оқиға дұрыс қабылданады, алайда, егер бағдарлама жабылған болса, оқиға қабылданбайды және іске қосу кезінде қабылданбайды.

Қосымшаны орнатып, оны тіркелгенге дейін бірнеше рет іске қостық. Мен бұл мәселеде қатты жоғалттым, сондықтан кез келген кеңес жоғары бағаланды.

Өңдеу: журналдарда барлық басқа жабық қосымшалардың (Youtube, FileObserver және т.б.) boot_completed оқиғаны алғанын көруге болады, тек менің емес.

20

7 жауаптар

Барлық бағдарламалар Android 3.1 бастап, орнату кезінде « тоқтатылған « күйінде орналасады. (Қолданба күшінің соңынан кейін аяқталады) қолданбаны Параметрлер қолданбасында тоқтатады.)

Android stopped state

«Тоқтатылған» күйде болғанда, қолданба ешқандай себеппен істемейді , әрекетті қолмен іске қоспағанда. ( ACTION_PACKAGE_INSTALLED , BOOT_COMPLETED және т.б.) ешқандай BroadcastReceviers дегенді білдірмейді, олар тіркелген оқиғаға қарамастан, дейін пайдаланушы қолданба қолмен басқарады .)

Бұл Google-ге қарсы зиянкестерге қарсы әрекет. Google алдымен, бұл бағдарлама көп нәрсе істей алмас бұрын, пайдаланушылар алдымен іске қосу құралынан әрекетті бастауы керек деп сендірді. BOOT_COMPLETED әрекеті іске қосылғанша дейін жеткізілуін болдырмау - бұл дәлелдің логикалық салдары.

Бұл туралы толығырақ:
http://developer.android.com/about/versions/android-3.1.html#launchcontrols
& nbsp; & nbsp; regression.html

http://devmaze.wordpress.com/2011/12/05/activating-applications/

82
қосылды
Бірақ, алдымен жүктемені толық таратуды тіркеудің мәні қандай? Мен оны қалай көретінімді, егер құрылғы жүктеліп болғаннан кейін және қолданба іске қосылмай тұрып, қандай да бір әрекет жасай алмасаңыз/бірдеңе істей алмасаңыз, онда жүктеуді толық ресиверді тіркеудің мақсаты қандай болады?
қосылды автор Bluesir9, көзі
бұл жауапты тек BroadcastReceiver және Service қолданбасаңыз ғана оқуға болады
қосылды автор Akhil Jain, көзі
Бұл жауап көп дауысға лайық
қосылды автор Arijoon, көзі
Бұл тақырыпты сілтемесі де қамтиды.
қосылды автор zgulser, көзі
@ Bluesir9 Мен сені шатастырдым, бірақ бірнеше сағат бойы оқып шыққаннан кейін, мен бұл идеяларды алдым. Қолданбалар алғаш орнатылғанда, бірақ әлі іске қосылмаған кезде және пайдаланушымен қолмен тоқтатылған кезде (тоқтатылған күйде) тұрады. Бұл дегеніміз, пайдаланушы кем дегенде қолданбаны іске қосу керек орнатудан кейін бір рет қолданбаны іске қосу үшін түймесін басыңыз, содан кейін бағдарлама жүйеден қалыпты ретінде барлық жалған хабарларды қабылдай алады.
қосылды автор Think Twice Code Once, көзі
толығырақ мәлімет алу үшін менің жауапыма назар аударыңыз: android жұмыс істемеген «> stackoverflow.com/questions/20441308/…
қосылды автор Think Twice Code Once, көзі

Менің қолданымды BOOT_COMPLETED кезде бастаймын, сондықтан мен оны білемін. Мен Log.d қосамын, ол көрсетілмейді. Мен оны көрсететін Toast сөзін қосамын. Manifest.xml файлындағы кішкене айырмашылықтар


    
         
         
                

28
қосылды
@Ketan бұл әдепкі бойынша әдепкі болып табылады - егер бірдеңе жұмыс істей бастаса, сіз жай ғана «фондық режимде» қосылып, немесе huawei-де қорғалған қосымшаны қосыңыз немесе кез-келген заманауи телефондарда таңқаларлық болып көрінуі мүмкін. Мүмкін, басымдық үшін = 999.
қосылды автор Boris Treukhov, көзі
Рахмет, бұл ақыл жасады. Сондай-ақ, Android осы ресивер туралы білетіндіктен android: enabled = «true» android: exported = «true» де талап етіледі.
қосылды автор Ketan, көзі
Бірақ бұл әдепкі емес. developer.android.com/guide/topics/manifest/…
қосылды автор MZB, көзі
Log.d файлын Android мониторындағы басқа процестің консоліне аласың, өйткені export = «true» ресиверді жаңа процесс ретінде жасайды
қосылды автор Samuel Robert, көзі
Мен әдепкі тегті тастап кеттім
қосылды автор user346443, көзі

Әрбір жауап осында кішігірім ақпарат қосады, осылайша төменде келтірілген барлық мәліметтер:

BOOT_COMPLETED дегенді алу үшін төмендегілерді орындағаныңызды тексеріңіз:

  1. Add your receiver to manifest (don't forget the flags):

    
        
            
            
        
    
    
  2. Add permission:

  3. After installing your app, it needs to be lunch at least once, manually by the user, in order to receive Boot complete event.(More details)

25
қосылды
Жақсы біреу. Мен рұқсатты жіберіп алдым
қосылды автор Ton, көзі
бұл қажет емес
қосылды автор user3290180, көзі
Бірақ неге әдепкі керек?
қосылды автор JacksOnF1re, көзі
Мен бұл туралы [Marshmallow-де кем дегенде] менің қосымшамды күшейту керек болса, онда BroadcastReceiver onReceive ешқашан өртенбейді. Бұл шындық ма, егер бұлай болса, бұлай ма?
қосылды автор swooby, көзі

бұл мәселемен күресіп жатқандықтан, сіз logcat-дегі қосымшаны қадағалау үшін Log.d -ді қолданасыз, өкінішке орай, телефонды қайта іске қосқан кезде бағдарлама BOOT_Complete қабылдайды, бірақ сіз оны көре алмайсыз, себебі ол логартқа кірмейді.

BOOT_COMPLETED болып табылмағанын немесе алынбағанын тексеру үшін Log.d орнына тосттар мәтінін қолданып көріңіз.

осы Көмекке үміт артыңыз.

1
қосылды
Тосттар да көрсетілмейді.
қосылды автор user346443, көзі

Негізінде сізге Android нұсқасы қажет: enabled = «true» android: exported = «true» манифесттегі жалаушалар.


        
            
            
        
    
1
қосылды

Егер сізге жігіт қажет болса, C# нұсқасын беріңіз. Менің тестілерім бұл өте кемелсіз жұмыс істейді және іске қосу өте жылдам. Оны екеуін де C# ішінде қосу және AndroidManifest.xml ішіне қосу оны (ең болмағанда мен үшін) бұзатынын ескеріңіз.

Мен сондай-ақ кейбір жақсы және пайдалы мысалдар келтірдім, мен құжаттарды оқыған кезде мен оны өзіме үйренбей, біреуден білетінімді қаладым.

[BroadcastReceiver(Enabled = true, Exported = true, DirectBootAware = true, Name = "com.nevaran.startup.StartUpBootReceiver")]
[IntentFilter(new string[] {
    Intent.ActionBootCompleted
    , Intent.ActionLockedBootCompleted
    , Intent.ActionMyPackageReplaced
    , Intent.ActionUserInitialize
    , "android.intent.action.QUICKBOOT_POWERON"
    , "com.htc.intent.action.QUICKBOOT_POWERON"
})]
public class BootReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
         if(    intent.Action.Equals(Intent.ActionBootCompleted)
             || intent.Action.Equals(Intent.ActionLockedBootCompleted)
             || intent.Action.Equals(Intent.ActionUserInitialize)
             || intent.Action.Equals("android.intent.action.QUICKBOOT_POWERON")
             || intent.Action.Equals("com.htc.intent.action.QUICKBOOT_POWERON")
           )
        {
            //run code here only if its started by the chosen actions
        }
        //some code that doesnt care about which action is triggered by
    }
}
1
қосылды

Егер сіз BOOT_COMPLETE неге жұмыс істемейтінін немесе қабылдамайтын себебін білгіңіз келсе. Мен Сізге РЕСМИ АҚПАРАТ әзірлеу сайтына баруды ұсынамын. Олар нақты шешіммен түсіндірді.

Android developer - BOOT_COMPLETE

0
қосылды