Когда я вызываю метод SWITCHON() из другого класса, он не работает по мере необходимости. SWITCHON() изменяет состояние устройства. Я думаю, что весь класс должен быть запущен для использования SWITCHON().Метод Вызов из другого класса
Не могли бы вы посоветовать мне, как бы я сделал SWITCHON() запуск всего класса или если его вызов будет функционировать должным образом.
примечание: этот класс ищет подобные устройства по локальной сети, используя Протокол UDP
благодаря
---- Я хочу, чтобы выполнить класс от другой деятельности ----
/**
* It displays the list of found WeMoDevices, which can be refreshed,
* notify about additional and removal of a WeMoDevice
* and provide ability to control the state of the WeMoDevices
*/
public class WemoActivity extends Activity implements NotificationListener,
OnClickListener,
OnItemClickListener{
private ListView mListView;
private Button mRefreshButton;
private View mProgressBar;
public Button ONButton;
private WeMoSDKContext mWeMoSDKContext = null;
private String DeviceName= "uuid:Socket-1_0-221412K1100F3A";
public static String newState;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wemo);
mListView = (ListView)findViewById(R.id.list);
mRefreshButton = (Button)findViewById(R.id.refresh_button);
mProgressBar = findViewById(R.id.progress_bar);
mListView.setOnItemClickListener(this);
mRefreshButton.setOnClickListener(this);
mWeMoSDKContext = new WeMoSDKContext(getApplicationContext());
mWeMoSDKContext.addNotificationListener(this);
ONButton= (Button) findViewById(R.id.ON);
ONButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SWITCHON();
}
});}
/**
* Refresh the list of found devices on first launch
* and on coming into foreground
*/
@Override
protected void onStart() {
refresh();
super.onStart();
}
/**
* Stop WeMoSDKContext on application close
*/
@Override
protected void onDestroy() {
mWeMoSDKContext.stop();
super.onDestroy();
}
/**
* Listens the WeMoDevice events
* Updates ListView on REFRESH_LIST event, show notification on ADD_DEVICE, REMOVE_DEVICE
* and change state of corresponding ListItem of ListView on CHANGE_STATE event
*
*event the event
*udn the UDN of WeMoDevice provided the event
*/
@Override
public void onNotify(final String event, final String udn) {
this.runOnUiThread(new Runnable() {
@Override
public void run() {
WeMoDevice wemoDevice = mWeMoSDKContext.getWeMoDeviceByUDN(udn);
if (event.equals(WeMoSDKContext.REFRESH_LIST)) {
ArrayList<String> udns = mWeMoSDKContext.getListOfWeMoDevicesOnLAN();
ArrayList<WeMoDevice> wemoDevices = new ArrayList<WeMoDevice>();
for (String udn : udns) {
WeMoDevice listDevice = mWeMoSDKContext.getWeMoDeviceByUDN(udn);
if (listDevice != null && listDevice.isAvailable()) {
wemoDevices.add(listDevice);
}
}
mListView.setAdapter(new Adapter(getApplicationContext(), 0, wemoDevices));
mProgressBar.setVisibility(View.GONE);
mRefreshButton.setEnabled(true);
} else if (wemoDevice == null) {
//do nothing because of incorrect notification
} else if (event.equals(WeMoSDKContext.ADD_DEVICE)) {
Toast.makeText(getApplicationContext(),
getString(R.string.notification_add) + wemoDevice.getFriendlyName(),
Toast.LENGTH_SHORT).show();
} else if (event.equals(WeMoSDKContext.REMOVE_DEVICE)) {
Toast.makeText(getApplicationContext(),
getString(R.string.notification_remove) + wemoDevice.getFriendlyName(),
Toast.LENGTH_SHORT).show();
} else if (event.equals(WeMoSDKContext.CHANGE_STATE) || event.equals(WeMoSDKContext.SET_STATE)) {
for(int i = 0; i <= mListView.getLastVisiblePosition() - mListView.getFirstVisiblePosition(); i++) {
ListItem listItem = (ListItem)mListView.getChildAt(i);
if (listItem.getDevice().getUDN().equals(udn)) {
listItem.setState(wemoDevice.getState().split("\\|")[0]);
break;
}
}
}
}
});
}
/**
* The adapter to ListView
*
*/
private class Adapter extends ArrayAdapter<WeMoDevice> {
private ArrayList<WeMoDevice> mDevices;
/**
* Constructor
*
* context application context
* resource (not used)
* devices the array of WeMoDevices to display
*/
public Adapter(Context context, int resource, ArrayList<WeMoDevice> devices) {
super(context, resource, devices);
mDevices = devices;
}
/**
* Creates ListItem corresponding to WeMoDevice
*
* position the position of WeMoDevice in entry array
* convertView the created view, corresponded to the WeMoDevice
* @ parent (not used)
*
* @return created ListItem view
*/
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = new ListItem(getApplicationContext());
}
((ListItem)convertView).setDevice(mDevices.get(position));
return convertView;
}
}
/**
* Handle the click on refresh button
* and update the device list
*/
@Override
public void onClick(View view) {
if (view.getId() == R.id.refresh_button) {
refresh();
}
}
/**
* Updates the list of WeMoDevices in WeMoSDKContext
*/
private void refresh() {
mProgressBar.setVisibility(View.VISIBLE);
mRefreshButton.setEnabled(false);
mWeMoSDKContext.refreshListOfWeMoDevicesOnLAN();
}
/**
* Change the state of a WeMoDevice
*
* list ListView
* view ListItem
* position the position of current ListItem in ListView
* id the id of the current view
*/
@Override
public void onItemClick(AdapterView<?> list, View view, int position, long id) {
WeMoDevice device = ((ListItem)view).getDevice();
// change the state of switches
String state = device.getState().split("\\|")[0];
newState = WeMoDevice.WEMO_DEVICE_ON;
if (state.equals(WeMoDevice.WEMO_DEVICE_ON) || state.equals(WeMoDevice.WEMO_DEVICE_STAND_BY)) {
newState = WeMoDevice.WEMO_DEVICE_OFF;
}
mWeMoSDKContext.setDeviceState(newState, device.getUDN());
((ListItem)view).setState(WeMoDevice.WEMO_DEVICE_UNDEFINED);
}
public void SWITCHON(){
mWeMoSDKContext.setDeviceState(WeMoDevice.WEMO_DEVICE_ON, DeviceName);
}
public void SWITCHOFF(){
mWeMoSDKContext.setDeviceState(WeMoDevice.WEMO_DEVICE_OFF, DeviceName);
}
}
устройство должно быть найдено первым, чтобы метод работал и менял состояние. как я могу заставить весь класс работать из другого класса – Abby