Сейчас я имею дело с приложением Bluetooth, которое имеет интерфейс для поиска устройств пользователем, нажав кнопку, а затем приложение обнаружит и отобразит результат в ListView. Затем пользователь щелкает нужный элемент в ListView, чтобы установить соединение. После установления соединения приложение будет прослушивать подключенное устройство для любого входа. Я хотел бы сделать AlertDialog, когда пользователь ждет.
Я написал несколько кодов, пытаясь реализовать эту идею. Тем не менее, всегда есть исключение, которое говорит мне использовать тему Theme.AppCompat. Даже если я изменил AndroidManifest.xml или файл макета своей деятельности, заставив их использовать темы, связанные с Theme.AppCompat, он все равно показывает это исключение и вылетает.
Даже если я изменил AndroidManifest.xml или файл макета своей деятельности, заставив их использовать темы, связанные с Theme.AppCompat, он все равно показывает это исключение и вылетает.
Я использовал поток для прослушивания ввода (IOthread). Ниже приведены мои коды:
private class IOThread extends Thread
{
private final BluetoothSocket actualSocket;
private final InputStream actualInStream;
private final OutputStream actualOutStream;
private byte[] mmBuffer;//buffer store for the stream
......
//Run method is to receive from client
@Override
public void run()
{
Log.v("BSTIOthread","start to listen for input");
//I would like to add AlertDialog here
........
while (!stopListening)
{
try
{
//After creating the AlertDialog, it will start to read
numBytes = actualInStream.read(mmBuffer);
Log.v("BSTClientListening","Something has been read.");
//send the obtained bytes to the UI activity
String theString = IOUtils.toString(mmBuffer,"ASCII");
theString = theString.replaceAll("\\p{Cntrl}", "");
Log.v("BSTServerInput","Message received = "+theString);
if (theString.length()!=0)
stopListening = true;
messageTextView.setText("Received: "+theString);
Message readMsg = ClientHandler.obtainMessage(MessageConstants.MESSAGE_READ,numBytes,-1,mmBuffer);
readMsg.sendToTarget();
} catch (IOException e)
{
......
}
}
}
Ниже приведены мои коды в AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.abc.def.revisedbluetoothstdtest">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission
android:name="android.permission.BLUETOOTH_PRIVILEGED"
tools:ignore="ProtectedPermissions" />
<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"
android:screenOrientation = "portrait"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ServerActivity"
/>
<activity android:name=".ClientActivity"
/>
</application>
Мой файл styles.xml показан ниже:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Полагаю, что после настройки AppTheme мои нужные AlertDialogs могут быть успешно показаны и больше исключений не будет. Однако, как вы можете видеть, хотя моя AppTheme в styles.xml использует темы Theme.AppCompat, она все равно выдает исключение и вылетает.