Android: 如何通知到通知

Android: How to notification to notification

我是超级初学者。现在我尝试使用 NotificationListenerService 发出 Android 通知。

问题:

[A]应用程序没有 post 通知,但我可以在 logcat 中检查 (A) 应用程序调试日志。

我想在 [A] post 通知时自动 post 作为 [B] 应用程序通知。

(我正在[B]申请。)

现在:

当post时,我可以获得[A]应用程序包名称。然后...停止,我如何从 [B] 应用程序 post notification(id & package name)?使用广播接收器?

NotificationService.java

package com.testnotification;

import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;


public class NotificationService extends NotificationListenerService {
    private String TAG = "Notification";
    private String Sample = "com.notification.sample";    ///this is [A]application

    @Override
    public void onNotificationPosted(StatusBarNotification sbn) {
        String packagename = sbn.getPackageName();

        if(packagename.equals(Sample)){
            showLog(sbn);
        }
    }

    private void showLog( StatusBarNotification sbn ){
        int id = sbn.getId();
        String name = sbn.getPackageName();
        Log.d(TAG,"id:" + id +
                " name:" + name);
    }
}

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.testnotification">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Testnotification">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name=".NotificationService"
            android:label="@string/app_name"
            android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
            android:exported="true">
        <intent-filter>
            <action android:name=
                "android.service.notification.NotificationListenerService" />
        </intent-filter>
        </service>

    </application>

</manifest>

MainActivity.java(还空)

请教教我

您是否检查过用户是否授予您的应用通知监听权限

    /**
 * Is Notification Service Enabled.
 * Verifies if the notification listener service is enabled.
 * Got it from: https://github.com/kpbird/NotificationListenerService-Example/blob/master/NLSExample/src/main/java/com/kpbird/nlsexample/NLService.java
 * @return True if enabled, false otherwise.
 */
private boolean isNotificationServiceEnabled(){
    String pkgName = getPackageName();
    final String flat = Settings.Secure.getString(getContentResolver(),
            ENABLED_NOTIFICATION_LISTENERS);
    if (!TextUtils.isEmpty(flat)) {
        final String[] names = flat.split(":");
        for (int i = 0; i < names.length; i++) {
            final ComponentName cn = ComponentName.unflattenFromString(names[i]);
            if (cn != null) {
                if (TextUtils.equals(pkgName, cn.getPackageName())) {
                    return true;
                }
            }
        }
    }
    return false;
}

如果您没有权限,您可以打开设置应用让用户启用权限

    /**
 * Build Notification Listener Alert Dialog.
 * Builds the alert dialog that pops up if the user has not turned
 * the Notification Listener Service on yet.
 * @return An alert dialog which leads to the notification enabling screen
 */
private AlertDialog buildNotificationServiceAlertDialog(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setTitle(R.string.notification_listener_service);
    alertDialogBuilder.setMessage(R.string.notification_listener_service_explanation);
    alertDialogBuilder.setPositiveButton(R.string.yes,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    startActivity(new Intent(ACTION_NOTIFICATION_LISTENER_SETTINGS));
                }
            });
    alertDialogBuilder.setNegativeButton(R.string.no,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // If you choose to not enable the notification listener
                    // the app. will not work as expected
                }
            });
    return(alertDialogBuilder.create());
}

这是我在 GitHub 中找到的通知监听器的完整项目
https://github.com/Chagall/notification-listener-service-example