Использование контекста в Android Studio для вызова PackageManager - PullRequest
0 голосов
/ 26 июня 2018

Я нахожусь в процессе написания приложения, которое будет использовать 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));

  }
}

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Просматривая это руководство Google, я смотрю, что это простой способ показать нам, что context необходимо для вызова этих методов.Затем внутри activity эта переменная не нужна, потому что она уже существует, поэтому просто позвоните getPackageManager()...

0 голосов
/ 26 июня 2018

Вам не нужно инициализировать объект Context.Активность в иерархии является дочерним классом Context.

Вы можете просто вызвать getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE); в своем классе Activity.Не нужно явно инициализировать Context

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...