java - Android Studio 无法识别课程?
问题描述
我正在尝试通过 WiFi 在 2 个设备之间进行一些简单的通信,并且一直在关注Sarthi Technology 的教程。
不幸的是,我无法让 Android Studio 识别一个类......
从图片中您可以看到它WifiDirectBroadcastReceiver
以红色突出显示,即使您也可以看到它存在于下一个选项卡中。
类声明public class WifiDirectBroadcastReceiver extends BroadcastReceiver
在 MainActivity mReceiver 中声明为BroadcastReceiver mReceiver;
当我单击红色灯泡时,它会询问我是否要创建课程,然后抱怨该课程已经存在!
我是 Java 新手,所以我在这里缺少什么?(顺便说一句,教程中的那个人没有这个问题)
编辑#1:提供一个工作示例的完整代码清单
MainActivity.java
package qdivision.org.wifiexample2;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.net.wifi.p2p.WifiP2pManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button btnOnOff, btnDiscover, btnSend;
ListView listView;
TextView read_msg_box, connectionStatus;
EditText writeMsg;
WifiManager wifiManager;
WifiP2pManager mManger;
WifiP2pManager.Channel mChanel;
BroadcastReceiver mReceiver;
IntentFilter mIntentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialWork();
exqListener();
}
private void exqListener() {
btnOnOff.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(wifiManager.isWifiEnabled()){
wifiManager.setWifiEnabled(false);
btnOnOff.setText("ON");
}else{
wifiManager.setWifiEnabled(true);
btnOnOff.setText("OFF");
}
}
});
}
private void initialWork() {
btnOnOff = (Button) findViewById(R.id.onOff);
btnDiscover = (Button) findViewById(R.id.discover);
btnSend = (Button) findViewById(R.id.sendButton);
listView = (ListView) findViewById(R.id.peerListView);
read_msg_box = (TextView) findViewById(R.id.readMsg);
connectionStatus = (TextView) findViewById(R.id.connectionStatus);
writeMsg = (EditText) findViewById(R.id.writeMsg);
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
mManger = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChanel = mManger.initialize(this, getMainLooper(), null);
mReceiver = new WifiDirectBroadcastReceiver(mManger, mChanel, this);
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(mReceiver, mIntentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
}
WifiDirectBroadcastReceiver.java
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.p2p.WifiP2pManager;
import android.widget.Toast;
import qdivision.org.wifiexample2.MainActivity;
public class WifiDirectBroadcastReceiver extends BroadcastReceiver {
private WifiP2pManager mManager;
private WifiP2pManager.Channel mChanel;
private MainActivity mActivity;
public WifiDirectBroadcastReceiver(WifiP2pManager mManager, WifiP2pManager.Channel mChanel, MainActivity mActivity)
{
this.mManager = mManager;
this.mChanel = mChanel;
this.mActivity = mActivity;
}
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)){
int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
if(state == WifiP2pManager.WIFI_P2P_STATE_ENABLED){
Toast.makeText(context, "Wifi is ON", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(context, "Wifi is OFF", Toast.LENGTH_SHORT).show();
}
}else if(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)){
//do something
}else if(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)){
//do something
}else if(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)){
//do something
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/onOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="28dp"
android:layout_marginTop="55dp"
android:text="Wifi On" />
<Button
android:id="@+id/discover"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/onOff"
android:layout_alignBottom="@+id/onOff"
android:layout_centerHorizontal="true"
android:text="discover" />
<ListView
android:id="@+id/peerListView"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_alignParentStart="true"
android:layout_below="@+id/onOff"
android:layout_marginTop="25dp"
android:background="@android:color/holo_orange_light" />
<TextView
android:id="@+id/readMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/peerListView"
android:layout_marginTop="31dp"
android:text="Message"
android:textAlignment="center"
android:textSize="20sp"
android:textStyle="italic" />
<EditText
android:id="@+id/writeMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:ems="10"
android:inputType="textPersonName"
android:layout_toStartOf="@+id/sendButton" />
<Button
android:id="@+id/sendButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:text="Send" />
<TextView
android:id="@+id/connectionStatus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="15dp"
android:text="Connection Status"
android:textAlignment="center"
android:textColor="@android:color/holo_blue_dark"
android:textSize="18sp"
android:textStyle="italic" />
</RelativeLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="qdivision.org.wifiexample2">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
进度更新:我已经尝试了迄今为止的所有建议,但仍然WifiDirectBroadcastReceiver
无法识别该课程MainActivity
解决方案:该类被保存在错误的文件夹中,一旦移动它就一切正常
解决方案
检查您创建的课程是否为“公共”。
如果是,点击“Rebuild Project”或重启Android Studio,有时会解决很多问题。
推荐阅读
- python - Django:OperationalError 没有这样的列
- react-native - 登录后重定向到主页返回箭头不应该出现
- java - Eclipse 无法打开并出现工作区等异常,并以不兼容的文件格式保存
- python - 什么是 TypeError:'type' 对象不可下标?
- flutter - 如何自定义 AlertDialog 并使用 Future
- react-native - 如何将 Dimensions.get("window").height 转换为百分比?
- macos - zsh: command not found: denon - 即使在安装 denon 之后
- javascript - javascript 中的 N+1 未按预期工作
- python - 类中的Python二叉树属性问题
- python - 在 ubuntu 系统上执行 python 脚本后没有释放 RAM 内存