如何在Android 3.1及以上版本中实现开机自启动应用程序?

3

我从这里得知,在Android 3.1及以上版本中,不支持启动完成意图(boot complete intent)(来源)。但在我的应用中,我想要在设备重新启动后自动启动服务,而不希望用户手动启动我的应用程序。我该怎么做?感谢您提前的帮助。

3个回答

0

尝试以下步骤以在启动后启动应用程序:

创建一个扩展BroadcastReceiver的类:

     public class AutostartService extends BroadcastReceiver {  

      @Override  
      public void onReceive(Context context, Intent intent) {
      System.out.println("in broad....");

       if ((intent.getAction() != null) && (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")))
    {
        System.out.println("in broadcast receiver.....");
        Intent i = new Intent(context, Splash.class);  
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        context.startActivity(i);  
         }
        }

     }

并且将以下内容添加到 Android Manifest 文件中:

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

        <receiver android:name=".AutostartService"   android:enabled="true" 
        android:exported="true">

    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

        </receiver>  

这对我也有效,但仅适用于Gingerbread。在Android版本3.1及以上(三星Galaxy S3)中,我不会收到此意图。我该怎么办? - thej
我认为在某些设备上它可能不起作用,因为我也曾在一些三星设备上遇到过类似的问题...制造商会根据他们的需求更改硬件,所以他们可能没有提供此项权限...它在所有HTC设备上都可以工作,但只有在一些三星设备上可以工作。 - G M Ramesh

0

这个内容已经很老了,大部分人可能已经学过了,但仍然可能有用。

从3.1版本及以上开始,为了接收BOOT_COMPLETED广播,你的应用程序必须至少被用户启动一次。

注意:此规则不适用于/system应用程序。


0

你为什么认为 ACTION_BOOT_COMPLETED 广播不再发送了?我经常使用它,其他人也是。只要确保在清单文件中拥有 RECEIVE_BOOT_COMPLETED 权限即可。


即使在姜饼版本中对我有效,但是我在Samsung galuxy s3上无法得到这个意图,参考http://www.vogella.com/blog/2011/12/11/automatically-starting-services-in-android-after-booting/。我该怎么办? - thej
1
Lars所说的是,从HoneyComb开始,在接收BOOT_COMPLETED广播之前,必须至少启动一次应用程序。它仍然有效。 - 323go
是的,但我不想让用户干预来打开活动并启动应用程序。 - thej
很抱歉,这是无法避免的...但是,如果应用程序启动一次,BOOT_COMPLETED广播将在所有后续引导时接收到,并且不需要进一步的用户交互。 - 323go
@thej,我同意323go的评论...应该在接收到BOOT_COMPLETED之前启动应用程序....我的意思是你应该先启动应用程序,然后如果你重新启动设备,它就会工作并打开你的应用程序。 - G M Ramesh

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