通过通知按钮打开蓝牙

时间:2014-11-03 14:20:03

标签: android notifications

我目前正在开发一个Android应用程序和蓝牙对于该应用程序至关重要。我运行后台服务。后台服务的一个作用是检查蓝牙是否启用。如果不是,则会有新通知。当你点击它时,我想要启用蓝牙,用户能够恢复他正在做的任何事情。就是这样。

现在,当我点击通知时,它会启动一个新活动,并启用新视图和蓝牙。我不希望那种新观点存在。我在启用蓝牙后尝试使用finish(),但这会让我回到我应用中的最后一个活动,而不是我在按下通知之前使用的应用程序。

所以,我正在阅读新闻应用,点击通知和蓝牙启用,但也带我到我自己的应用程序而不是我正在使用的新闻应用程序。

这是发送的新通知:

if (!mBluetoothAdapter.isEnabled())
{
            NotificationCompat.Builder mBuilder;

            mBuilder =
                    new NotificationCompat.Builder(this)
                            .setSmallIcon(R.drawable.bluetooth)
                            .setContentTitle("Bluetooth disabled")
                            .setContentText("Click here to enable bluetooth")
                            .setOngoing(true);
            Intent resultIntent = new Intent(this, TurnOnBluetooth.class);
            resultIntent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);

            int mNotificationId = 159;

            PendingIntent resultPendingIntent =
                    PendingIntent.getActivity(
                            this,
                            0,
                            resultIntent,
                            PendingIntent.FLAG_UPDATE_CURRENT
                    );
            mBuilder.setContentIntent(resultPendingIntent);

            mNotifyMgr.notify(mNotificationId, mBuilder.build());

        }
    }

这是TurnOnBluetooth.java中的onCreate():

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_turn_on_bluetooth);
        NotificationManager mNotifyMgr =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        mBluetoothAdapter.enable();
        mNotifyMgr.cancel(159);
        finish();
    }

请注意,我评论了setContentView();因为我不想要一个新的视图,我只想要打开蓝牙并在之后删除通知,而不是别的。并且在按下通知之前,finish()将我带回我的应用程序而不是我正在使用的应用程序。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

我能够自己解决这个问题。我没有开始新的活动,而是使用了一个可以解决问题的广播接收器。

broadcastreceiver的onReceive():

public void onReceive(Context context, Intent intent) {
        NotificationManager mNotifyMgr =
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        mBluetoothAdapter.enable();
        mNotifyMgr.cancel(159);
    }

Manifest中的接收者:

<receiver
            android:name="com.novioscan.service.NotificationReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="NotService"/>
            </intent-filter>
        </receiver>

新通知声明:

if(!mBluetoothAdapter.isEnabled()){
            NotificationCompat.Builder mBuilder;

            mBuilder =
                    new NotificationCompat.Builder(this)
                            .setSmallIcon(R.drawable.bluetooth)
                            .setContentTitle("Bluetooth disabled")
                            .setContentText("Click here to enable bluetooth")
                            .setOngoing(true);
            // Intent resultIntent = new Intent(this, TurnOnBluetooth.class);
            Intent resultIntent = new Intent("NotService");

            //resultIntent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);

            // Sets an ID for the notification
            int mNotificationId = 159;

            PendingIntent resultPendingIntent =
                    PendingIntent.getBroadcast(
                            this,
                            0,
                            resultIntent,
                            0
                    );
            mBuilder.setContentIntent(resultPendingIntent);

            // Builds the notification and issues it.
            mNotifyMgr.notify(mNotificationId, mBuilder.build());
        }

现在一切都很好用了:))