关闭后如何使应用程序工作

时间:2015-08-28 19:50:53

标签: android bluetooth

上一篇文章,我可以在与任何设备断开连接时创建一个禁用蓝牙连接的应用。一切正常,但我仍然面临一个问题...它只有在应用程序打开时才有效。即使关闭,我怎样才能使其有效?

请在下面找到用于主要活动的代码:

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();
        }
    }

}

很多

2 个答案:

答案 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

希望有所帮助,如果您需要更多帮助,请告诉我,我会帮助您。