0

ネットワークをチェックするためのブロードキャストがあります。ネットワークの状態が変化すると、onNetworkActivated() または onNetworkInactivated() でアクティビティに通知します。

public class NetworkBroadcastReceiver extends BroadcastReceiver
{
    private OnNetworkListener currentActivity = null;

    public NetworkBroadcastReceiver(FragmentActivity activity)
    {
        try
        {
            currentActivity = (OnNetworkListener) activity;
        }
        catch (ClassCastException e)
        {
            throw new ClassCastException(activity.toString() + " doit implémenter OnNetworkListener");
        }
    }

    @Override
    public void onReceive(Context context, Intent intent)
    {
        ConnectivityManager connectivity = (ConnectivityManager)  
                    context.getSystemService(Context.CONNECTIVITY_SERVICE);

        if (connectivity == null)
        {
            currentActivity.onNetworkInactivated();
            return;
        }
        else 
        {
            NetworkInfo info = connectivity.getActiveNetworkInfo();
            if (info != null && info.getState() == NetworkInfo.State.CONNECTED)
            {
                 currentActivity.onNetworkActivated();
                 return;
            }
        }
        currentActivity.onNetworkInactivated();
    }

    public interface OnNetworkListener
    {
        public void onNetworkActivated();
        public void onNetworkInactivated();
    }
}

私のアクティビティでは、さまざまな理由でsendBroadcastを初めて呼び出す必要があるときに、Androidがクラッシュします:s

public class Earthquake extends FragmentActivity implements OnNetworkListener
{
    private FragmentManager fragmentManager;
    private NetworkBroadcastReceiver networkbroadcastreceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        fragmentManager = getSupportFragmentManager();
        networkbroadcastreceiver = new NetworkBroadcastReceiver(Earthquake.this);
        this.registerReceiver(networkbroadcastreceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
        this.sendBroadcast(new Intent(ConnectivityManager.CONNECTIVITY_ACTION));
    }

    @Override
    protected void onDestroy()
    {
        this.unregisterReceiver(networkbroadcastreceiver);
        super.onDestroy();
    }

    public void onNetworkActivated()
    {
        Log.e("onNetworkActivated", "onNetworkActivated");
    }

    public void onNetworkInactivated()
    {
        Log.e("onNetworkInactivated", "onNetworkInactivated");
    }
}

何が問題ですか ?

前もって感謝します

4

1 に答える 1

0

https://stackoverflow.com/a/17906435/2201919 By @ JoxTraex

このブロードキャストの送信は許可されていません。アプリケーションがこのブロードキャストを送信できる場合、デバイスで問題が発生する可能性があります。これは保護されたシステム ブロードキャストです。

別の方法で問題にアプローチしてください。

参照: http://developer.android.com/reference/android/net/ConnectivityManager.html

そのアクションを使用するメソッドがわずかしかないことに注目してください。これは、このブロードキャストを送信できないことを意味します。

于 2014-01-03T16:14:35.393 に答える