我尝试使用本教程中的示例代码,但它似乎过时了,而且不起作用。所以我必须做出什么改变,什么文件有我的应用程序自动启动时,Android完成启动?


当前回答

此外,如果你不想修改代码,你可以使用像AutoStart这样的应用程序来启动一个android应用程序:AutoStart -没有根

其他回答

另一种方法是使用android.intent.action.USER_PRESENT而不是android.intent.action.BOOT_COMPLETED来避免引导过程中的减速。但这只在用户启用锁屏时才成立-否则此意图永远不会广播。

参考博客- Android的ACTION_USER_PRESENT意图的问题

Sean的解决方案最初并不适合我(Android 4.2.2)。我必须在同一个Android项目中添加一个虚拟活动,并在设备上手动运行该活动至少一次。然后Sean的解决方案开始工作,BroadcastReceiver在随后的重新启动后得到通知。

首先,你需要AndroidManifest.xml中的权限:

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

同样,在yourAndroidManifest.xml中,定义你的服务并监听BOOT_COMPLETED动作:

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

然后需要定义接收方,它将获得BOOT_COMPLETED操作并启动服务。

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

现在,当电话启动时,您的服务应该正在运行。

对于flutter用户,可以创建一个名为MainActivityReceiver的文件。Kt在包文件夹。如。android / app / src / main /芬兰湾的科特林/ com/your_company/package。

MainActivityReceiver.kt:

package com.your_company.package

import android.content.BroadcastReceiver
import android.content.Context;
import android.content.Intent;

class MainActivityReceiver: BroadcastReceiver() {
  override fun onReceive(context: Context, intent: Intent) {
    if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
      val i = Intent(context, MainActivity::class.java)
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
      context.startActivity(i)
    }
  }
}

根据第一个答案修改你的AndroidManifest.xml文件。

监听ACTION_BOOT_COMPLETE并从那里做你需要做的事情。这里有一个代码片段。

更新:

答案上的原始链接下降了,所以根据评论,这里是链接代码,因为当链接下降时,没有人会错过代码。

在AndroidManifest.xml(应用程序部分)中:

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

}

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