我正试图获得用户连接到网络的那一刻,然后我认为这BroadcastReceiver是一个很好的方法......我想做的事情是,当用户连接到网络时,知道该网络是否已连接到Internet .
主要的是知道WiFi是否需要Browse Log in示例:Handling Network Sign-On文档
我把我BroadcastReceiver变成了这个
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) {
Log.d("Network", "Internet YAY");
} else if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.DISCONNECTED) {
if (isNetworkOnline()) {
Log.d(TAG, String.valueOf(tikis));
NetTask TeInternet = new NetTask();
TeInternet.execute("https://www.google.com");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试连接到WiFi没有Internet Connection输入的是这样的:
D/Network? Internet YAY
D/Network? Internet YAY
D/Network? Internet YAY
D/RequiresLoginBroadcast? 1 //this occurs sometimes …Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个广播接收器,每次用户接到来电时都会被触发.现在,当它发生时,我需要广播接收器来调用特定活动中的特定方法.现在,我尝试将此方法设置为静态,因此可用,但有些东西告诉我这是一个非常糟糕的主意.
因此,我尝试在我的活动中实例化广播接收器而不在我的清单中声明它但问题是 - 当应用程序关闭时,活动不存在,因此我无法调用我的方法.
所以我的问题是 - 当广播接收器被激发时,如何在不使其成为"公共静态"的情况下调用此方法?
这是我的活动代码(我删除了不相关的部分)
package com.silverfix.ringo.activities;
import com.silverfix.ringo.R;
import com.silverfix.ringo.activities.fragments.DataManagerFragment;
import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class RingtonesActivity extends Activity{
private DataManagerFragment dataManagerFragment;
private IntentFilter filter;
private BroadcastReceiver phoneCall;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ringtones);
ActionBar ab = getActionBar();
ab.setDisplayShowTitleEnabled(false);
ab.setDisplayHomeAsUpEnabled(true);
dataManagerFragment = new DataManagerFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(dataManagerFragment, "DataManagerFragment");
ft.commit();
filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
phoneCall = new BroadcastReceiver() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我想在某个时间使用警报运行一些代码.我已经成功实现了一个警报,广播接收器在清单中注册,但我理解它的方式,这种方法使用一个单独的类广播接收器.
我可以使用此方法启动另一个活动,但我无法使用它在我的主要活动中运行方法?
所以我一直试图在我的主要活动中注册我的广播接收器,如上面的答案所述.
private BroadcastReceiver receiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
uploadDB();
}
};
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(null);
this.registerReceiver(this.receiver, filter);
}
public void onPause() {
super.onPause();
this.unregisterReceiver(this.receiver);
}
Run Code Online (Sandbox Code Playgroud)
但是我无法让它与闹钟管理器一起工作,我不确定如何将警报意图链接到广播接收器.有人能指出我在活动中动态注册警报管理器广播接收器的例子吗?或解释我会怎么做?