广播接收器不触发开关方法

时间:2015-03-24 23:58:38

标签: android broadcastreceiver

为什么我的广播接收器只发送和创建通知? 我试图让它自动打开设备 但设备状态由于某种原因没有改变。

如果在其他类中触发但在广播中没有触发它。

请帮我找到解决方案:)

public class ProximityIntentReceiver extends BroadcastReceiver  {


public boolean isFirstRun = false;  //Set this to true when user initially saves location

private static final int NOTIFICATION_ID = 1000;

WemoActivity wemo = new WemoActivity();

private WeMoSDKContext mWeMoSDKContext = null;
private String DeviceName= "uuid:Socket-1_0-221412K1100F3A";



@Override
public void onReceive(Context context, Intent intent) {



    String key = LocationManager.KEY_PROXIMITY_ENTERING;

    Boolean entering = intent.getBooleanExtra(key, false);

    SharedPreferences mprefs = context.getSharedPreferences("First time", 
            Context.MODE_PRIVATE);

    boolean isFirstRun = mprefs.getBoolean("First time", false);



    if (entering) {



        Toast.makeText(context,"in the region"  ,Toast.LENGTH_LONG).show();
        Log.d(getClass().getSimpleName(), "Entering");

    }
    else {
        Log.d(getClass().getSimpleName(), "Exiting");
         Toast.makeText(context,"out of the region"  ,Toast.LENGTH_LONG).show();

        }   


    sendNotification(context);


    //automatically switch device state when enter/leave region
    DeviceState(context.getApplicationContext(), entering);


    }








    public void sendNotification(Context context){
        // String extra=arg1.getExtras().getString("alert").toString();
        long when = System.currentTimeMillis();

        String message = "You are near your office/home.";

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        Notification notification = new Notification(R.drawable.ic_launcher,message, when);

        String title = "Proximity Alert!"; 

        Intent notificationIntent = new Intent();

        // set intent so it does not start a new activity
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent intent = PendingIntent.getActivity(context, 0,notificationIntent, 0);

        notification.setLatestEventInfo(context, title, message, intent);

        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        notification.flags |= Notification.FLAG_SHOW_LIGHTS;
        notification.ledARGB = Color.WHITE;
        notification.ledOnMS = 1500;
        notification.ledOffMS = 1500;


        notification.defaults = Notification.DEFAULT_ALL;
        notificationManager.notify(NOTIFICATION_ID, notification);




        return;


    }





    private void DeviceState(Context context, boolean ON) {

        mWeMoSDKContext = new WeMoSDKContext(context);


mWeMoSDKContext.addNotificationListener(null);


        if(ON) {

              mWeMoSDKContext.setDeviceState(WeMoDevice.WEMO_DEVICE_ON, DeviceName);

        }else {
              mWeMoSDKContext.setDeviceState(WeMoDevice.WEMO_DEVICE_OFF, DeviceName);
        }
    }
 }

1 个答案:

答案 0 :(得分:0)

如果您的意思是BroadcastReceiver,则取决于接收者的性质。

通常,在onReceive()中使用该代码是正确的答案,特别是对于明显注册的接收器,因为它们仅适用于一个广播。

如果您使用registerReceiver()注册接收者,欢迎您根据需要创建构造函数。