我无法配置Intent和BroadcastReceiver。

3

我希望从“class gps_Listener”创建“Intent”,并在“class LocationChangedReceiver”中发送参数。

我的类名为gps_Listener。

public class gps_Listener implements LocationListener {

        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            send("I found the location");

        }

        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

        public void send(String str) {
            Intent intent = new Intent("logGPS");
            intent.putExtra("Message", str);
            sendBroadcast(intent);   //-  without context does not work

        }


    }

并且类LocationChangedReceiver

public class LocationChangedReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

    }

}

我不知道该如何操作,因为你可以看到这里没有“上下文”。

1
通常在Java(以及Android)中,类名以大写字母开头。 - Heiko Rupp
1个回答

3
你可以在创建监听器时传递上下文,这样你就可以在发送方法中使用它:
public class gps_Listener implements LocationListener {
    private Context context;

    public gps_Listener(Context context) {
        this.context = context;
    }

    ...

    public void send(String str) {
        Intent intent = new Intent("com.your.package.YOUR_ACTION");
        intent.putExtra("Message", str);
        context.sendBroadcast(intent);
    }
}

按照以下方式创建:

gps_Listener myListener = new gps_Listener(yourContext);
LocationManager myManager = (LocationManager)getSystemService(LOCATION_SERVICE);
myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myListener);

请记得在清单文件中注册您的广播接收器(您也可以动态地进行注册和取消注册):

<receiver android:name=".receivers.LocationChangedReceiver" android:enabled="true">
   <intent-filter>
       <action android:name="com.your.package.YOUR_ACTION"></action>
   </intent-filter>
</receiver>

我的BroadcastReceiver可以在没有上下文的情况下工作吗? 例如,如果我在清单文件中添加<receiver android:name=".receivers.LocationChangedReceiver"> - Max Usanin
1
@MaxUsanin 是的,你可以在清单文件中注册你的接收器。但是要添加一个意图过滤器,这样它只能接收你想要的意图。这是你的问题吗?<receiver android:name=".receivers.LocationChangedReceiver" android:enabled="true"><intent-filter><action android:name="yourIntentAction"></action></intent-filter></receiver> - Romain Guidoux
@MaxUsanin,我的编辑是否回答了你的问题?我必须说,当你谈到清单上下文时,我并不真正理解你的意思。 - Romain Guidoux
广播接收器中传递参数时,总是需要上下文吗? - Max Usanin
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/17484/discussion-between-max-usanin-and-romain-guidoux - Max Usanin
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接