2012-02-13 216 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