簡體   English   中英

ANDROID-調用sendBroadcast檢查網絡時崩潰

[英]ANDROID - Crash when I call sendBroadcast to check the network

我有一個廣播來檢查網絡,當網絡更改狀態時,我通過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();
    }
}

在我的Activity中,當II由於各種原因需要調用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");
    }
}

問題是什么 ?

先感謝您

https://stackoverflow.com/a/17906435/2201919通過@ JoxTraex

您無權發送此廣播。 如果應用程序可以發送此廣播,則可能導致設備出現問題。 這是受保護的系統廣播。

請以其他方式解決您的問題。

請參閱: http : //developer.android.com/reference/android/net/ConnectivityManager.html

請注意,只有少數幾種方法可以使用該操作。 這意味着您無法發送此廣播。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM