在Android手机启动时启动一个活动

3

当手机启动时,我希望我的应用程序能够自动启动。 我在清单文件中声明了一个BroadcastReceiver。

<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" />

我为接收方创建了一个Java文件。
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);
    }
}

然而,当我打开手机时应用程序没有启动。有人能告诉我这里我漏掉了什么吗?

4个回答

5

请尝试使用以下方式编写您的if语句:

    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);
    }

1
这真的有效。如果你想在启动时开始活动,你需要添加这个标志。谢谢。 - Stan

2
如果您使用的是Android 3.1或更高版本:
请确保您手动至少启动过一次您的应用程序(例如,通过从应用程序抽屉中打开它)。否则,您的应用程序被系统标记为 stopped 状态:
引用:
当应用程序首次安装但尚未启动时,它们处于 stopped 状态。
停止的应用程序不会接收任何广播意图,包括 BOOT_COMPLETED。
有关更多信息,请参见 Android 3.1 平台 - 关于已停止应用程序的启动控制。

谢谢你的回答,但我正在设计2.3.3版本,并且只有在手动启动我的应用程序后才会重新启动。 - Swayam
@CodeDroid 根据问题中的细节,这肯定是可能的。由于您没有提供更多信息:我猜我可能会对您的某个问题进行了负面评价,或者其他什么事情让您生气了?编辑:可能是因为我昨天关闭了这个问题 - user658042

1
最好的答案是展示一个通知,让用户从通知中启动应用,并在通知中使用该活动的待处理意图。

0

已在 Android 10 上测试通过

1. 创建广播监听器

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. 配置清单

<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>

如果你正在寻找一个与服务在后台工作并控制屏幕开/关的示例应用程序代码,请访问此存储库: https://github.com/varunon9/DynamicWallpaper

你可以使用步骤12更新此存储库源代码,以控制启动关闭事件,除了屏幕开/关


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接