2012-02-13 238 views
1

我想在设备启动完成后运行我的应用程序。 为此,我发现在互联网上的一些有用的代码:Android自动启动活动(应用程序启动两次)

public class MyBootCompleteReceiver extends BroadcastReceiver 
{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     if(intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) 
     { 
      Intent pushIntent = new Intent(context, MainActivity.class); 
      pushIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      context.startActivity(pushIntent); 
     } 
    } 
} 

而且Manifest条目:

<receiver android:name="MyBootCompleteReceiver" android:enabled="true" android:exported="false" 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> 

现在,如果我启动我的设备的应用程序似乎启动两次。 然后我尝试用“REORDER_TO_FRONT”替换“NEW_TASK”标志(我也在互联网上阅读过),但是如果我这样做了,我的应用程序会在启动时崩溃。 此外,如果我删除所有标志,它也崩溃。

希望你能帮助!

+0

它为什么会崩溃?任何错误日志? – 2012-02-13 13:23:46

+0

不,不幸的是(因为我的eclipse没有在启动后记录)。 解锁屏幕后,出现典型的黑色对话框(应用程序意外崩溃 - >强制关闭)。 – Chris 2012-02-13 13:47:10

回答

1

所以......

后很长很长的测试,我发现,这个问题应该是我的身体平板电脑(华硕Eee Pad transfortem Android版本3.2。 1)。

因为我已经在模拟器(Android版本3.2)中试过它,并且那里发布的源代码(在这个线程的顶部)工作得很好。 没有启动两次的应用程序,没有错误。 即使您删除了“pushIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);”代码工作。

所以看来,我不得不等待更新(也许在Android 4.0)。

我希望这可以帮助有同样问题的人。

+0

如果您对'BroadcastReceiver'使用高优先级,请将其删除。我做到了,似乎系统还没有......完全启动,并且我的应用程序启动,然后崩溃。我不确定它是否被调用过两次。但是,取消高优先级后,该应用程序运行良好。 – 2012-02-28 20:03:14

+0

对不起,我没有看到你的XML。但是我的问题看起来和你的一样,我做了什么来解决它是上面的评论。 – 2012-02-28 20:35:03

+0

如何删除高优先级?哪里? – Chris 2012-03-05 12:49:43

0

在您的清单文件中的活动中使用启动完成意图过滤器。

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

我希望它可以帮助...

+0

源代码应该如何? – Chris 2012-02-13 13:46:05