繁体   English   中英

状态栏面板中的 Android 通知工具栏?

[英]Android Notification Toolbar in the Status bar panel?

我想知道如何在任何 android 设备的 android 状态栏中实现一个固定的工具栏。 我说的是下面显示的通知中的按钮。 下面提供了一个示例。 即使用户还没有打开应用程序,它是否有可能运行?

有人可以指出我正确的方向吗? 是否有库,或者我们可以使用提供的本机 android 库来实现它吗?

在此处输入图片说明

作为一个简单的例子,下面的代码将在启动时发出一个带有Button的持续Notification来启动你的应用程序。

首先,在您的清单中,请求获得BOOT_COMPLETED广播的权限,并注册一个接收器来处理它。

<manifest ...>

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    ...

    <application ...>
        ...

        <receiver android:name=".BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

BootReceiver简单地使用在MainActivity定义的static方法发出Notification

public class BootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        MainActivity.setNotification(context, true);
    }
}

setNotification()方法使用下面的简单布局为Notification创建一个RemoteViews实例,并在Button上设置一个PendingIntent ,并为您的应用程序启动Intent

public static void setNotification(Context context, boolean enabled) {
    NotificationManager manager =
        (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);

    if (enabled) {
        final RemoteViews rViews = new RemoteViews(context.getPackageName(),
                                                   R.layout.notification);

        final Intent intent = context.getPackageManager()
            .getLaunchIntentForPackage(context.getPackageName());

        if (intent != null) {
            PendingIntent pi = PendingIntent.getActivity(context,
                                                         0,
                                                         intent,
                                                         0);

            rViews.setOnClickPendingIntent(R.id.notification_button_1, pi); 
        }

        Notification.Builder builder = new Notification.Builder(context);
        builder.setContent(rViews)
            .setSmallIcon(R.drawable.ic_launcher)
            .setWhen(0)
            .setOngoing(true);

        manager.notify(0, builder.build());
    }
    else {
        manager.cancel(0);
    }
}

Notification的布局只是一个ImageView和一个水平LinearLayoutButton

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView android:id="@+id/notification_image"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginRight="10dp"
        android:src="@drawable/ic_launcher" />

    <Button android:id="@+id/notification_button"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="Button" />

</LinearLayout>

请注意,从 API 3.1 开始,您必须在安装后至少启动一次您的应用程序才能使其脱离停止状态。 在此之前, BootReceiver将不会传送广播。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM