How do I start my app on startup?

前端 未结 8 1782
失恋的感觉
失恋的感觉 2020-11-22 01:06

I tried using the sample code in this link but it seems outdated and it did not work. So what changes do I have to make and to what files to have my app start automatically

相关标签:
8条回答
  • 2020-11-22 01:46

    Listen for the ACTION_BOOT_COMPLETE and do what you need to from there. There is a code snippet here.

    Update:

    Original link on answer is down, so based on the comments, here it is linked code, because no one would ever miss the code when the links are down.

    In AndroidManifest.xml (application-part):

    <receiver android:enabled="true" android:name=".BootUpReceiver"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
    
            <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
    </receiver>
    

    ...

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

    ...

    public class BootUpReceiver extends BroadcastReceiver{
    
            @Override
            public void onReceive(Context context, Intent intent) {
                    Intent i = new Intent(context, MyActivity.class);  //MyActivity can be anything which you want to start on bootup...
                    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(i);  
            }
    
    }
    

    Source: https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup

    0 讨论(0)
  • 2020-11-22 01:48

    screenshot

    I would like to add one point in this question which I was facing for couple of days. I tried all the answers but those were not working for me. If you are using android version 5.1 please change these settings.

    If you are using android version 5.1 then you have to dis-select (Restrict to launch) from app settings.

    settings> app > your app > Restrict to launch (dis-select)

    0 讨论(0)
  • 2020-11-22 01:51

    First, you need the permission in your AndroidManifest.xml:

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

    Also, in yourAndroidManifest.xml, define your service and listen for the BOOT_COMPLETED action:

    <service android:name=".MyService" android:label="My Service">
        <intent-filter>
            <action android:name="com.myapp.MyService" />
        </intent-filter>
    </service>
    
    <receiver
        android:name=".receiver.StartMyServiceAtBootReceiver"
        android:label="StartMyServiceAtBootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    

    Then you need to define the receiver that will get the BOOT_COMPLETED action and start your service.

    public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
                Intent serviceIntent = new Intent(context, MyService.class);
                context.startService(serviceIntent);
            }
        }
    }
    

    And now your service should be running when the phone starts up.

    0 讨论(0)
  • 2020-11-22 01:53

    This is how to make an activity start running after android device reboot:

    Insert this code in your AndroidManifest.xml file, within the <application> element (not within the <activity> element):

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
    <receiver
        android:enabled="true"
        android:exported="true" 
        android:name="yourpackage.yourActivityRunOnStartup"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
    
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    
    </receiver>
    

    Then create a new class yourActivityRunOnStartup (matching the android:name specified for the <receiver> element in the manifest):

    package yourpackage;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    public class yourActivityRunOnStartup extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
                Intent i = new Intent(context, MainActivity.class);
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);
            }
        }
    
    }
    

    Note: The call i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); is important because the activity is launched from a context outside the activity. Without this, the activity will not start.

    Also, the values android:enabled, android:exported and android:permission in the <receiver> tag do not seem mandatory. The app receives the event without these values. See the example here.

    0 讨论(0)
  • 2020-11-22 01:55

    The Sean's solution didn't work for me initially (Android 4.2.2). I had to add a dummy activity to the same Android project and run the activity manually on the device at least once. Then the Sean's solution started to work and the BroadcastReceiver was notified after subsequent reboots.

    0 讨论(0)
  • 2020-11-22 01:56

    For Android 10 there is background restrictions.

    For android 10 and all version of android follow this steps to start an app after a restart or turn on mobile

    Add this two permission in Android Manifest

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

    Add this in your application tag

    <receiver
            android:name=".BootReciever"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
    </receiver>
    

    Add this class to start activity when boot up

    public class BootReciever extends BroadcastReceiver {
    
    @Override
    public void onReceive(Context context, Intent intent) {
    
        if (Objects.equals(intent.getAction(), Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent(context, SplashActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
     }}
    

    We need Draw overlay permission for android 10

    so add this in your first activity

     private fun requestPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!Settings.canDrawOverlays(this)) {
                val intent = Intent(
                    Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                    Uri.parse("package:" + this.packageName)
                )
                startActivityForResult(intent, 232)
            } else {
                //Permission Granted-System will work
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题