2

I want to automatically launch my app on TV startup. i.e. when the user power on the TV, TV will powerup and my app will start.

I have followed multiple links on internet and tried to implement it but no activity is shown on startup. Followed How to start/ launch application at boot time Android

As I was not getting any response on start, followed Android-Boot Completed is not working in Broadcastreceiver

I have extensively searched web and stackoverflow, it is strange that I cannot find a solution to make it work till now. Don't know what am I doing wrong...

here is my code...

MainActivity.java

public class MainActivity extends FragmentActivity {
public WebView mWebview;
private android.content.Context Context;
private ProgressDialog mProgressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    String url = "http://www.test.com";

    if (!DetectConnection.checkInternetConnection(this)) {
        Toast.makeText(getApplicationContext(), "No Internet Connection!", Toast.LENGTH_LONG).show();
        finish(); //Calling this method to close this activity when internet is not available.
    } else {
        WebView webView = (WebView) findViewById(R.id.main_fragment);
        webView.getSettings().setJavaScriptEnabled(true);
        CookieManager.getInstance().setAcceptCookie(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        WebSettings webSettings = webView.getSettings();
        webSettings.setDomStorageEnabled(true);
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webSettings.setUseWideViewPort(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl(url);
    }
}

StartAppOnBoot.java

public class StartAppOnBoot extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction() == null) {
        return;
    }

    //if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
    if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        boolean startupAfterBoot = prefs.getBoolean("serenity_boot_startup", false);
        if (startupAfterBoot) {
            Intent i = new Intent(context, MainActivity.class);
            //i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
}

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.test.tv2"
tools:ignore="MissingLeanbackLauncher">

<uses-feature
    android:name="android.software.leanback"
    android:required="false" />
<uses-feature
    android:name="android.hardware.touchscreen"
    android:required="false" />

<application
    android:usesCleartextTraffic="true"
    android:allowBackup="true"
    android:icon="@drawable/ic_banner"
    android:label="TV2"
    android:supportsRtl="true"
    tools:ignore="GoogleAppIndexingWarning"
    android:banner="@mipmap/tv_banner_foreground">
    <activity android:name="com.test.tv2.MainActivity"
        android:screenOrientation="landscape"
        android:theme="@style/Theme.Leanback"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name="com.test.tv2.StartAppOnBoot"
        android:enabled="true"
        android:exported="true">
        <intent-filter android:priority="1000">
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>
</application>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>
Observer
  • 345
  • 1
  • 4
  • 21
  • What version of Android are you working with ? What device (tv) are you trying to prove this on or are you trying emulation ? – djmonki Sep 09 '22 at 12:57
  • Android 9. It is a Wisdom share smart TV. Even on emulator it is not working – Observer Sep 10 '22 at 04:55
  • It sounds like you need additional permissions added. Did you closely review the documentation regarding permissions? Perhaps that 10 year old question which only has answers up to Android 5.1 is now a little dated. Most likely, there is at least one more user permission needed, which is not yet documented by that first SO answer that you quoted. – Darrin Sep 14 '22 at 01:11

0 Answers0