2014-12-01 74 views
1

我已经尝试使用:有没有一种可靠的方式来启动Android的启动活动?

<action android:name="android.intent.action.BOOT_COMPLETED" /> 

但是,这是开始启动Android平台上的活动远远不一致的方式。

有什么保证在启动时启动我的应用程序?

+0

我可以问吗?你的活动的基本目的是什么?它是一个家庭发射器更换?它真的需要成为一项活动而不是一项服务吗? – 2014-12-01 17:42:49

+0

这是一个复杂的问题朋友。我正在制作一个使用Unity作为启动器活动的自助服务终端系统,另一个背景活动则是出于安全原因的功能。这种背景活动需要是一项活动,因为它利用了所谓的三星诺克斯(Samsung Knox),它需要一项活动来与用户交互进行身份验证。我希望我能把它变成一项服务。我只是需要一种可靠的方式来启动这个活动。 – 2014-12-01 17:56:47

+0

完成sd扫描。 – danny117 2014-12-01 19:37:38

回答

1

您必须申报清单中的权限:

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

然后搭上了广播接收器的意图:

在清单:

<receiver 
    android:name="com.mypackagename.MyBroadcastReceiver" 
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED" 
    android:exported="false" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</receiver> 

在MyBroadcastReceiver.java:

public class MyBroadcastReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Intent i = new Intent(context, YourClass.class); 
     context.startActivity(i); 
    } 
} 
+0

对不起,我没有具体提到这种方法不可靠吗? – 2014-12-01 18:27:34

+0

怎么回事?请解释。我在很多项目中使用过它,并且一直按预期工作 – 2014-12-01 18:29:17

+0

在我正在开发的项目中,我发现该事件并不总是在系统启动时被解雇。这可能是由于我的自定义启动器或我正在做的事情,但无论如何,我都要求提供除此之外的解决方案。 – 2014-12-01 18:34:44

0

我正在使用Android Studio。

我也在创建一个在Boot Complete上运行的服务,而且我最初还有一大堆不一致和不可靠的结果,我的应用程序(服务)似乎甚至没有尝试启动。

有时它可以很好地工作,然后当我更新项目与其他一些非BroadcastReciever相关的更新,它似乎打破了自动启动。

我发现当我去运行我的应用程序并监视logcat时,发现在某些情况下,Android操作系统广播服务可能需要整整30秒才能更新包更新。

例如,从logcat的......

03-03 17:08:26.757  681-1780/? D/PackageBroadcastService﹕ Received broadcast action=android.intent.action.PACKAGE_REMOVED and uri=com.test.jbyrne.anotherautostart 
#### Note the time stamp between the PACKAGE_REMOVED (above) and PACKAGE_ADDED (below) #### 
03-03 17:08:26.825  681-681/? I/ConfigFetchService﹕ PackageReceiver: Intent { act=android.intent.action.PACKAGE_ADDED dat=package:com.test.jbyrne.anotherautostart flg=0x8000010 cmp=com.google.android.gms/.config.ConfigFetchService$PackageReceiver (has extras) } 
03-03 17:08:26.833  681-681/? I/ConfigFetchService﹕ onStartCommand Intent { act=android.intent.action.PACKAGE_ADDED dat=package:com.test.jbyrne.anotherautostart cmp=com.google.android.gms/.config.ConfigFetchService (has extras) } 
03-03 17:08:26.841  707-707/? D/PackageAddedReceiver﹕ package added com.test.jbyrne.anotherautostart 
03-03 17:08:26.873  681-1816/? D/PackageBroadcastService﹕ Received broadcast action=android.intent.action.PACKAGE_ADDED and uri=com.test.jbyrne.anotherautostart 
03-03 17:08:26.877 1419-1818/? I/UpdateIcingCorporaServi﹕ Updating corpora: APPS=com.test.jbyrne.anotherautostart, CONTACTS=MAYBE 
03-03 17:08:27.005  681-1816/? D/PackageBroadcastService﹕ Received broadcast action=android.intent.action.PACKAGE_REPLACED and uri=com.test.jbyrne.anotherautostart 

然后,我改变了一些不相关的,当我下一次更新数据包...

03-03 17:10:29.866 2454-3515/? D/PackageBroadcastService﹕ Received broadcast action=android.intent.action.PACKAGE_REMOVED and uri=com.test.jbyrne.anotherautostart 
#### This time, it takes over 30 seconds to Update the Broadcast Services!!! #### 
03-03 17:11:00.190 2454-2454/? I/ConfigFetchService﹕ PackageReceiver: Intent { act=android.intent.action.PACKAGE_ADDED dat=package:com.test.jbyrne.anotherautostart flg=0x8000010 cmp=com.google.android.gms/.config.ConfigFetchService$PackageReceiver (has extras) } 
03-03 17:11:00.194 2454-2454/? I/ConfigFetchService﹕ onStartCommand Intent { act=android.intent.action.PACKAGE_ADDED dat=package:com.test.jbyrne.anotherautostart cmp=com.google.android.gms/.config.ConfigFetchService (has extras) } 
03-03 17:11:00.206 2404-2404/? D/PackageAddedReceiver﹕ package added com.test.jbyrne.anotherautostart 
03-03 17:11:00.222 2454-3587/? D/PackageBroadcastService﹕ Received broadcast action=android.intent.action.PACKAGE_ADDED and uri=com.test.jbyrne.anotherautostart 
03-03 17:11:00.246 3168-3589/? I/UpdateIcingCorporaServi﹕ Updating corpora: APPS=com.test.jbyrne.anotherautostart, CONTACTS=MAYBE 
03-03 17:11:00.326 2454-3601/? D/PackageBroadcastService﹕ Received broadcast action=android.intent.action.PACKAGE_REPLACED and uri=com.test.jbyrne.anotherautostart 

我花了很多时间试图找出为什么这是如此不可靠,最终归结为在Android操作系统广播服务更新之前,我很早就重启了我的设备。

尝试等待一分钟,然后重新启动设备以测试更新,以确保更新各种广播服务。或者监控

android.intent.action.PACKAGE_ADDED 

行。

我希望这有助于!

亲切的问候,

约翰