1

電話がwifiに接続されたときにアプリを自動的に起動しようとしています。ブロードキャストレシーバーを設定し、ブロードキャストが受信されたら「接続済み」アクティビティを起動するように指定するために使用しているコードは次のとおりです。

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 をリークした」と言っています。

これを解決する方法を知っている人はいますか?

編集:マニフェストファイルを介して受信者を登録しようとしました。このコードをマニフェストに追加しました:

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

そして、このコードを私の主な活動に:

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);
        }
    };

しかし、電話がwifiに接続すると、アプリがクラッシュします。Logcat には、「RuntimeException: レシーバーをインスタンス化できません」と表示されます。

それを解決する方法はありますか?

4

2 に答える 2

2

電話がwifiに接続されたときにアプリを自動的に起動しようとしています。

BroadcastReceiver要素を使用してマニフェストに登録し、メソッドで提供されたを<receiver>レシーバーに呼び出します。startActivity()ContextonReceive()

デバイスが Wi-Fi に接続されているという理由だけで、アクティビティがポップアップ表示されることをユーザーが歓迎しない場合があることに注意してください。

于 2012-06-21T20:05:20.957 に答える
1

リンクごとおよびアクティビティが IntentReceiver をリークしたため

onCreate() で作成した Broadcast Receiver の登録を解除します。

onRestart() で、新しいブロードキャスト レシーバーを再登録します。

于 2012-06-21T19:59:14.133 に答える