我想知道如何在任何 android 设备的 android 状态栏中实现固定工具栏。我说的是下面显示的通知中的按钮。下面提供了一个示例。即使用户没有打开应用程序,它是否可能运行?
有人可以指出我正确的方向吗?是否有一个库,或者我们可以使用提供的本机 android 库来实现它吗?
我想知道如何在任何 android 设备的 android 状态栏中实现固定工具栏。我说的是下面显示的通知中的按钮。下面提供了一个示例。即使用户没有打开应用程序,它是否可能运行?
有人可以指出我正确的方向吗?是否有一个库,或者我们可以使用提供的本机 android 库来实现它吗?
作为一个简单的示例,以下代码将在启动时发出一个正在进行Notification
的Button
启动您的应用程序。
首先,在您的清单中,请求获取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
只需Notification
使用在此示例static
中定义的方法即可。MainActivity
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MainActivity.setNotification(context, true);
}
}
该方法使用下面的简单布局setNotification()
创建一个RemoteViews
实例,并在启动时为您的应用设置一个。Notification
PendingIntent
Button
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
和Button
一个水平的LinearLayout
。
<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
将不会传送广播。