Swayam
Swayam

Reputation: 16354

Start an Activity on Phone Boot in Android

I want to start my application automatically when the phone boots. I declared a BroadcastReceiver in the manifest file.

<receiver android:name=".Autostart">  
<intent-filter>  
    <action android:name="android.intent.action.BOOT_COMPLETED" />  
</intent-filter>  

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

I made a java file for the receiver.

Autostart.java

public class Autostart extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {  

    Intent pushIntent = new Intent(context, MushTouchActivity.class); 
    pushIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(pushIntent);
    }
}

}

But, the application does not launch when I switch my phone on. Can anyone tell me what I am missing here ?

Upvotes: 3

Views: 5562

Answers (4)

Eyni Kave
Eyni Kave

Reputation: 1530

Tested on Android 10

1. Create A Broadcast Listener

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction() == "android.intent.action.ACTION_SHUTDOWN") {
        // Your tasks for shut down
    } else {
        // Your tasks for Boot up
    }
}

}

2. Config Manifest

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

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:theme="@style/AppTheme">

    <receiver
        android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.ACTION_BOOT_COMPLETED" />
            <action android:name="android.intent.action.REBOOT" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
            <action android:name="android.intent.action.ACTION_SHUTDOWN" />
        </intent-filter>

    </receiver>

</application>

If you search for a sample application code for working with services in background and control actions on screen off/on then visit this repo: https://github.com/varunon9/DynamicWallpaper

you can update this repo source code with step 1 and 2 for control boot and shutdown events in addition to screen on/off.

Upvotes: 0

Tallal Tasawar
Tallal Tasawar

Reputation: 19

The best answer would be to show a Notification and ask the user to launch the app from that notification and use a pending intent for that activity in the notification.

Upvotes: 1

user658042
user658042

Reputation:

In case you are on Android 3.1 or newer:

Make sure that you started your application at least once manually (e.g. by opening it from the app drawer). Otherwise your app is marked as stopped by the system:

Applications are in a stopped state when they are first installed but are not yet launched

Stopped apps do not receive any broadcast intents, including BOOT_COMPLETED.

See Android 3.1. Platform - Launch controls on stopped applications for more information.

Upvotes: 2

FoamyGuy
FoamyGuy

Reputation: 46846

try your if statement like this:

    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){


        Intent i = new Intent(context, MushTouchActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        context.startActivity(i);
    }

Upvotes: 5

Related Questions