上一篇文章,我可以在与任何设备断开连接时创建一个禁用蓝牙连接的应用。一切正常,但我仍然面临一个问题...它只有在应用程序打开时才有效。即使关闭,我怎样才能使其有效?
请在下面找到用于主要活动的代码:
package com.myapps.connectionmanager;
import java.util.Set;
import java.util.TimerTask;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import android.util.Log;
public class QuickPrefsActivity extends PreferenceActivity {
private static final String TAG = "QuickPrefsActivity";
private static final int REQUEST_ENABLE_BT = 12;
private static boolean state = false;
private BluetoothAdapter adapter;
private SharedPreferences sharedPrefs;
private Boolean getPrefValue;
private int getTimePrefValue;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
//controllo esistenza BT
setBluetoothAdapter();
IntentFilter filter1 = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED);
IntentFilter filter2 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED);
IntentFilter filter3 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED);
this.registerReceiver(mReceiver, filter1);
this.registerReceiver(mReceiver, filter2);
this.registerReceiver(mReceiver, filter3);
}
@Override
public void onDestroy() {
super.onDestroy();
// Unregister broadcast listeners
unregisterReceiver(mReceiver);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, 0, 0, "Show current settings");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
startActivity(new Intent(this, ShowSettingsActivity.class));
return true;
}
return false;
}
private void setBluetoothAdapter() {
// Getting the Bluetooth adapter
adapter = BluetoothAdapter.getDefaultAdapter();
Log.i(TAG,
"\nAdapter: " + adapter.toString() + "\n\nName: "
+ adapter.getName() + "\nAddress: "
+ adapter.getAddress());
// Check for Bluetooth support in the first place
// Emulator doesn't support Bluetooth and will return null
if (adapter == null) {
Toast.makeText(this, "Bluetooth NOT supported. Aborting.",
Toast.LENGTH_LONG).show();
}
}
//The BroadcastReceiver that listens for bluetooth broadcasts
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
Log.i(TAG,"Device found");
}
else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
Log.i(TAG,"Device is now connected");
}
else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
Log.i(TAG,"Done searching");
}
else if (BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED.equals(action)) {
Log.i(TAG,"Device is about to disconnect");
}
else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
Log.i(TAG,"Device has disconnected");
switchOFF_BT();
}
}
};
private static boolean blueToothON_OFF_Status() {
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
if (!bluetooth.isEnabled()) {
Log.i(TAG,"Bluetooth is Disable...");
state = true;
} else if (bluetooth.isEnabled()) {
// String address = bluetooth.getAddress();
// String name = bluetooth.getName();
// Log.i(TAG,name + " : " + address);
state = false;
}
return state;
}
private void switchOFF_BT(){
if (!blueToothON_OFF_Status()){
adapter.disable();
}
}
}
很多
答案 0 :(得分:1)
以下是关于您要做的事情的一些很好的资源:
创建后台服务:
https://developer.android.com/training/run-background-service/create-service.html
在后台服务中运行:
http://developer.android.com/training/run-background-service/index.html
我还会看一下最佳实践部分
答案 1 :(得分:1)
如何在关闭后使应用程序正常工作
您可以使用Service执行此操作。有了它,您可以在关闭它时运行您的应用程序。
这是一个如何做到的完美示例Android Services Tutorial
因此,当您在http://sportest.com:8000/complete/facebook/?redirect_state=5q29qH6sUnl6MVAZxPFPgoEbdlsF5GkD
上创建Service class
时,可以添加这些方法。
MainActivity
另外,请不要忘记在// Method to start the service
public void startService(View view) {
startService(new Intent(getBaseContext(), MyService.class));
}
// Method to stop the service
public void stopService(View view) {
stopService(new Intent(getBaseContext(), MyService.class));
}
manifest.xml
这是另一个Example of service。
希望有所帮助,如果您需要更多帮助,请告诉我,我会帮助您。