2012-06-21 72 views
1

我試圖讓我的應用程序在手機連接到wifi時自動啓動。下面是我使用的這兩個設置的廣播接收器,並指定一旦接收到廣播我要推出的「連接」活動代碼:Android:如何在接收特定廣播時啓動我的應用程序?

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); 
receiver = new BroadcastReceiver(){ 
       public void onReceive(Context context, Intent intent){ 
        Intent intent2 = new Intent(getApplicationContext(),com.example.package.Connected.class); 
        startActivity(intent2); 
       } 
      }; 
registerReceiver(receiver,intentFilter); 

遺憾的是它不工作。 logcat說我的活動「泄露了IntentReceiver」。

有誰知道我該如何解決這個問題?

EDIT:我也嘗試通過Manifest文件註冊接收器。一旦手機連接到WiFi

private BroadcastReceiver receiver = new BroadcastReceiver(){ 
     public void onReceive(Context context, Intent intent){ 
      Intent intent2 = new Intent(getApplicationContext(),com.example.package.Connected.class); 
      context.startActivity(intent2); 
     } 
    }; 

但現在我的應用程序崩潰:我加入這個代碼清單:

<receiver android:name="com.example.package.receiver"> 
    <intent-filter> 
      <action android:name="android.net.wifi.STATE_CHANGE" /> 
    </intent-filter> 
</receiver> 

,然後將此代碼到我的主要活動。 Logcat說「RuntimeException:無法實例化接收器」。

任何想法如何解決呢?

+1

在第二種情況下,您需要製作一個seprate類擴展BroadcastReceiver並在android:name =「com.example.package.receiver」中給出該包的名稱,其中包括類名稱 –

+0

謝謝,現在正在處理它。 –

+0

下面是一個示例應用程序,顯示了一個清單註冊的接收器:https://github.com/commonsguy/cw-omnibus/tree/master/SystemEvents/OnWiFiChange – CommonsWare

回答

2

我試圖讓我的應用程序在手機連接到wifi時自動啓動。

註冊您BroadcastReceiver在清單中,使用<receiver>元素,並且對在onReceive()方法提供的Context接收呼叫startActivity()

請注意,用戶可能不會因爲連接到WiFi的設備而不喜歡您的彈出式活動。

+0

我試過這個,但現在得到一個崩潰。如果你可以看一下,我粘貼上面的代碼。非常感謝。 –

1

爲每linkActivity has leaked IntentReceiver

註銷您在OnCreate()

在onRestart(創建廣播接收器)重新註冊一個全新的廣播接收器。

+0

但是,即使應用程序暫停或未運行,我也希望這樣做。我應該取消註冊廣播接收機嗎? –

+0

這個活動甚至沒有暫停.. –

相關問題