当应用在后台时,我有public class MyFirebaseInstanceIdService
来处理firebase通知。
public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
MainActivity.sendRegToken();
}
}
MainActivity
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
WebView webView = (WebView) findViewById(R.id.webView);
public void sendRegToken() {
String recent_token = FirebaseInstanceId.getInstance().getToken();
webView.loadUrl("javascript:sendRegToken('"+recent_token+"');");
}
}
我需要访问webView
,因此我可以致电loadUrl
。 sendRegToken()
是一种非静态方法,我试图从静态上下文中访问它。我无法使sendRegToken()
成为静态,因为它包含非静态webView
。我该如何解决这个问题?
答案 0 :(得分:0)
使用课程LocalBroadcastManager
可以在此处找到示例:LocalBroadcastManager Example
1.在MainActivity上广播。
2.使用您在Intent发送中需要的参数从onTokenRefesh()
发送广播。
答案 1 :(得分:0)
请不要这样做。
如果您有此通讯的API,请使用正常的Http请求,如果您没有API,请参阅this
顺便说一下,Greenrobot / EventBus的方式比LocalBroadCastManager更好更简单。
答案 2 :(得分:0)
免责声明:Haven没有尝试过,但从理论上说它应该有用......
使用观察者模式。
itemsChanged(items) {
var me = this;
me.setState({item : items}, function(){
console.log("ITEMS : ", me.state.item);
});
}
并定义该接口
public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {
List<TokenRefreshListener> tokenListeners = new ArrayList<>();
public void addTokenListener(TokenRefreshListener listener) {
tokenListeners.add(listener);
}
// Should also add a remove method
@Override
public void onTokenRefresh() {
String token = getToken();
for (TokenRefreshListener l:tokenListeners) {
l.onTokenRefresh(token);
}
}
}
在Activity中,您需要实现该接口
public interface TokenRefreshListener {
void onTokenRefresh(String token);
}