2012-01-18 45 views
1

嗨我正在编写一个应用程序的Android从启动启动,我想知道是否有一种方式告诉应用程序它是从设备启动启动?如果应用程序是手动启动的(即不是在设备启动时),我需要它做一些不同的事情。我正在使用BroadcastReceiver在设备启动时启动应用程序。如何告诉应用程序是从启动设备开始的?

回答

1

你既可以做两个不同的广播接收者有一个ACTION_BOOT_COMPLETED用于intent过滤器,另一个接收者使用另一个intent过滤器。

,或者创建有两个意图过滤器,像一个广播接收器:

<receiver android:name=".BatteryReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/>        
     </intent-filter> 
     <intent-filter> 
      <action android:name="SOMETHING_ELSE"/>        
     </intent-filter>   
    </receiver> 

然后在onReceiver做:

if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){ 
    // do code for phone just powered on 
} else { 
    // do code for phone is already on 
} 

编辑: 上述假定您使用BroadcastReceiver下两种情况,根据你的问题可能不是这种情况。

所以,如果你在开始Activity(或服务),然后在BroadcastReceiver代码,你可以这样做:

Intent i = new Intent(context, MyClass.class); 
i.putExtra("STARTED_FROM_BOOT", true); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 
在活动

然后,你可以这样做:

if (getIntent().hasExtra("STARTED_FROM_BOOT")){ 
    // do your code for when started from boot. 
} 

设我知道我是否需要添加任何东西。

+0

开始startActivity(我)之前,你还需要i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); – NickT 2012-01-18 17:55:48

+0

@NickT谢谢。忘了那一点。我更新了。 – Jakar 2012-01-18 18:36:35

0

是,勾在清单与上boot completed意图broadcastreceiver当装置启动时,将接收器将被解雇,你可以做任何你想要有

<receiver android:name=".BatteryReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/>        
     </intent-filter>   
    </receiver> 
+0

这就是他已经做了大概,当它启动后 – NickT 2012-01-18 16:58:36

相关问题