Я нахожусь в процессе написания приложения, которое будет использовать WiFi Aware для публикации службы, но я не могу пройти начальный этап проверки того, поддерживает ли устройство службу или нет.API (от Google здесь: https://developer.android.com/guide/topics/connectivity/wifi-aware) указывает на использование этой строки кода:
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE);
Однако я не могу просто поместить это в свой класс MainActivity, так как я не создал экземпляр объекта с именем "контекст ". Я пытался искать ответы и не нашел ни одной такой работы. Любая форма помощи будет принята с благодарностью. Спасибо.
ОБНОВЛЕНИЕ
ЭтоКажется, что использование этого метода само по себе работает, однако это приведет к сбою приложения, если только он не вызывается внутри метода (такого как мой метод Publish()
). Я приложил свой код ниже для справки. Спасибо.
Мой код:
package com.patrickutz.wifiawarepublish;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.aware.AttachCallback;
import android.net.wifi.aware.WifiAwareManager;
import android.net.wifi.aware.WifiAwareSession;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.net.wifi.aware.PublishConfig;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// Constant values of WifiAwareManager
String state_change = WifiAwareManager.ACTION_WIFI_AWARE_STATE_CHANGED;
int data_init = WifiAwareManager.WIFI_AWARE_DATA_PATH_ROLE_INITIATOR;
int data_resp = WifiAwareManager.WIFI_AWARE_DATA_PATH_ROLE_RESPONDER;
public void publish(View view) {
// Check whether or not device supports WiFi Aware
boolean hasWiFiAware = getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE);
// Toast myToast = Toast.makeText(this, message, duration);
// Messages for whether or not device has WiFi Aware
Toast hasAware = Toast.makeText(this, "WiFi Aware Supported", Toast.LENGTH_SHORT);
Toast noAware = Toast.makeText(this, "WiFi Aware Unsupported", Toast.LENGTH_SHORT);
if (hasWiFiAware) {
hasAware.show();
} else {
noAware.show();
}
System.out.println(hasWiFiAware);
// Create WiFiAwareManager object
WifiAwareManager wifiAwareManager = (WifiAwareManager)getSystemService(Context.WIFI_AWARE_SERVICE);
// Check if WiFi Aware is available
boolean awareAvailable = wifiAwareManager.isAvailable();
// Messages for whether or not WiFi Aware is available
Toast isAvailable = Toast.makeText(this, "WiFi Aware Supported", Toast.LENGTH_SHORT);
Toast notAvailable = Toast.makeText(this, "WiFi Aware Unsupported", Toast.LENGTH_SHORT);
if (awareAvailable) {
isAvailable.show();
} else {
notAvailable.show();
}
// AttachCallback attachCallback = new AttachCallback();
// Handler handler = new Handler();
//
// wifiAwareManager.attach(attachCallback, handler);
// private static final String AWARE_FILE_SHARE_SERVICE_NAME = "Test Publish";
// PublishConfig config = new PublishConfig.Builder()
// .setServiceName(AWARE_FILE_SHARE_SERVICE_NAME)
// .build();
// Get the text views
TextView showStateChangeTextView = (TextView) findViewById(R.id.stateChangeTextView);
TextView showDataPathRoleInitTextView = (TextView) findViewById(R.id.dataPathRoleInitTextView);
TextView showDataPathRoleRespTextView = (TextView) findViewById(R.id.dataPathRoleRespTextView);
// Display the new values of current state in the text view.
showStateChangeTextView.setText("State: " + state_change);
showDataPathRoleInitTextView.setText("Data Initiator: " + Integer.toString(data_init));
showDataPathRoleRespTextView.setText("Data Responder: " + Integer.toString(data_resp));
}
}