Android WebSocket は、Android 10 プッシュのプッシュ イベントと表示イベントおよびクリック イベントを実装します。

最初のステップは websocket を導入することです
 

実装 "org.java-websocket:Java-WebSocket:1.5.1"

 

第二段階 

public class JWebSocketClient extends WebSocketClient {
    public JWebSocketClient(URI serverUri) {
        super(serverUri, new Draft_6455());
    }

    @オーバーライド
    public void onOpen(ServerHandshake ハンドシェイクデータ) {
        Log.e("JWebSocketClient", "onOpen()");
    }

    @オーバーライド
    public void onMessage(文字列メッセージ) {
        Log.e("JWebSocketClient", メッセージ);
    }

    @オーバーライド
    public void onClose(int code, String reason, boolean remote) {
        Log.e("JWebSocketClient", "onClose()");
    }

    @オーバーライド
    public void onError(Exception ex) {
        Log.e("JWebSocketClient", ex.getMessage());
    }


}

 三段目

アプリケーションに直接入れます 

プライベート JWebSocketClient クライアント。
プライベート URI;
public class BaseApplication extends Application {
   
   
@オーバーライド
public void onCreate() {
    super.onCreate();
//Push はインスタント メッセージングも実行できます
uri= URI.create("ws:// バックグラウンドで指定されたアドレスです");
 client= new JWebSocketClient(uri) {
     @オーバーライド
     public void onMessage(文字列メッセージ) {
         //message は受信したメッセージであるため、バックグラウンドで json を送信し、解析して使用できます
         Log.e("JWebSClientService", メッセージ);
         sendChatMsg(メッセージ);
     }
 };
// 接続を開く
 接続();

//Android 10 は通知タイプを設定する必要があります

//通知タイプを設定します。ここでは 2 つ設定します。さまざまなニーズに応じて、独自の設定を追加できます。使用する前に、通知許可を有効にすることを忘れないでください。  
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    文字列 channelId = "チャット";
    String channelName = "チャット メッセージ";
    int の重要性 = NotificationManager.IMPORTANCE_HIGH;
    createNotificationChannel(channelId, channelName, 重要性);

    channelId = "購読";
    channelName = "購読メッセージ";
    重要性 = NotificationManager.IMPORTANCE_DEFAULT;
    createNotificationChannel(channelId, channelName, 重要性);
}

}

@TargetApi(Build.VERSION_CODES.O)
private void createNotificationChannel(String channelId, String channelName, int important) {
    NotificationChannel チャネル = 新しい NotificationChannel(channelId、channelName、重要度);
    NotificationManager notificationManager = (NotificationManager) getSystemService(
            通知_サービス);
    notificationManager.createNotificationChannel(チャンネル);
}
//WebSocket オープン接続
プライベートボイド接続(){
    試す {
        client.connectBlocking();
    キャッチ(InterruptedException e){
        e.printStackTrace();
    }
}
プライベート int requestCode=0;
//使用箇所を見て2箇所、使用箇所に固定値を書き込むと1箇所目はプッシュした情報がコピーされ、2箇所目はプッシュのみ表示されます。書き方がイマイチ、わからない場合はこの2箇所を固定値として直接書いて試してみてください
public void sendChatMsg(String msg) {
    requestCode++;
    インテント インテント = 新しいインテント(this, NotificationClickReceiver.class);
    Log.e("fhxx","これが私が送信しようとしているものです"+msg +" ----- >"+requestCode);
    インテント.putExtra("msg",msg);
    PendingIntent ブロードキャスト = PendingIntent.getBroadcast(this、requestCode、意図、PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Notification notification = new NotificationCompat.Builder(this, "chat")
            .setContentTitle("チャットメッセージを受信しました")
            .setContentText(メッセージ)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.mipmap.icon_logo)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.icon_logo))
            .setDefaults(Notification.GROUP_ALERT_ALL) //デフォルトの通知音、振動モード、ライトを設定
            .setAutoCancel(真)
            .setContentIntent(ブロードキャスト)
            。建てる();
    manager.notify(requestCode, 通知);

}

}

public class NotificationClickReceiver は BroadcastReceiver を拡張します {
    @オーバーライド
    public void onReceive(コンテキスト コンテキスト、インテント インテント) {

        文字列 msg = インテント.getStringExtra("msg");
        インテント.setFlags(インテント.FLAG_ACTIVITY_NEW_TASK);
        Log.e("fhxx","これは私が受け取ったものです-"+msg);
    }
}

 ここまででプッシュの基本機能は実現できました。

 

 

 

おすすめ

転載: blog.csdn.net/jiexiao4151/article/details/111031743