繁体   English   中英

如何在启动时启动/启动应用程序 Android

[英]How to start/ launch application at boot time Android

我想在我的平板电脑启动时启动我的应用程序,以便我的应用程序的主要活动是用户在启动平板电脑时看到的第一件事。
我读过 LauncherActivity 但我不明白如何使用它。
任何人都可以为此提供建议、链接或教程吗?
LauncherActivity 是最好的方法还是有其他选择?

这些代码行可能对您有所帮助......

第1步:在AndroidManifest.xml中设置权限

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

第2步:在接收器中添加此意图过滤器

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

第3步:现在您可以从Receiver类的onReceive方法启动应用程序的第一个活动

public class BootReceiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
       Intent myIntent = new Intent(context, MainActivity.class);
       myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       context.startActivity(myIntent);
   }

}

如果您想在平板电脑启动时启动应用程序,则需要收听BOOT_COMPLETED操作并对其做出反应。 BOOT_COMPLETED是一个广播动作,在系统完成引导后广播一次。 您可以通过创建BroadcastReceiver来侦听此操作,然后在接收到具有BOOT_COMPLETED操作的意图时启动您的启动活动。

将此权限添加到清单:

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

在项目中创建自定义BroadcastReceiver:

public class MyBroadCastReceiver extends BroadcastReceiver {

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

        if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
            Intent i = new Intent(context, MyActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
} 

然后通过将BroadCastReceiver添加到Manifest来修改清单文件:

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

@vishesh chandra的回答是正确的。 但是在某些设备上无法正常工作,因为默认情况下app安装在外部存储上。 请确保您指定

android:installLocation="internalOnly"

否则,如果应用程序安装在SD卡中,您将不会收到任何引导完成操作。 将它添加到manifest.xml文件中的application标签中,它将起作用。

用法:

<application
        android:name=".Data.ApplicationData"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
        android:installLocation="internalOnly"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen">
        <!--activities, services...-->
</application>

我想在这个问题中添加一点我几天面临的问题。 我尝试了所有的答案,但那些不适合我。 如果您使用的是Android 5.1版,请更改这些设置。

如果您使用的是Android 5.1版,则必须从应用程序设置中取消选择(限制启动)。

设置>应用>您的应用>限制启动(取消选择)

请看图片。

图片

尝试 BootReceiver 代码后,您会看到您的应用在启动后无法启动。 Android 限制从后台启动活动。

https://developer.android.com/guide/components/activities/background-starts

启动后启动活动的工作方式是授予应用程序 SYSTEM_ALERT_WINDOW 权限。 在AndroidManifest.xml

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

在 MainActivity 中,添加此请求权限代码。 这将打开一个设置 window。 用户必须为您的应用启用权限。

// To start app after boot
private void startSystemAlertWindowPermission(){
    try{
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if(! Settings.canDrawOverlays(this)) {
                Log.i(TAG, "[startSystemAlertWindowPermission] requesting system alert window permission.");
                startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:"+getPackageName())));
            }
        }
    }catch (Exception e){
        Log.e(TAG, "[startSystemAlertWindowPermission] error:", e);
    }
}

如果用户授予权限,您的 MainActivity 将在启动后启动。

如果您的应用没有打开 Activity,而只是打开了后台服务,则不需要此权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM