无效通知(没有有效的小图标)。在Jitsi Meet中遇到此错误。

huangapple go评论58阅读模式
英文:

Invalid notification (no valid small icon). Getting this error in Jitsi meet

问题

java.lang.RuntimeException: Unable to start service org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService@25a9391 with Intent { cmp=com.example.mlimivirtualmeeting/org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService (has extras) }: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=JitsiOngoingConferenceChannel pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0xa color=0x00000000 category=call actions=2 vis=PUBLIC)

这个错误是由于你的应用中的 JitsiMeetOngoingConferenceService 服务尝试创建一个无效的通知(notification)导致的。通知需要包含一个有效的小图标。

要解决这个问题,你可以尝试以下步骤:

  1. 确保你的应用资源中包含了一个有效的小图标。通常,Android 要求通知包含一个小图标,用于在状态栏或通知抽屉中显示。你可以在 res/drawable 文件夹中添加一个小图标,并在通知中引用它。

  2. 确保你的通知代码正确设置了通知的小图标。在 JitsiMeetOngoingConferenceService 类的 onStartCommand 方法中,你需要使用 NotificationCompat.Builder(或类似的方式)创建通知,并为通知设置小图标。

示例代码:

// 在 JitsiMeetOngoingConferenceService 的 onStartCommand 方法中设置通知
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "JitsiOngoingConferenceChannel")
        .setSmallIcon(R.drawable.your_small_icon)  // 设置小图标
        .setContentTitle("Your Notification Title")
        .setContentText("Your Notification Text")
        .setPriority(NotificationCompat.PRIORITY_HIGH);

// 其他通知设置...

Notification notification = notificationBuilder.build();
startForeground(1, notification);  // 将服务设置为前台服务,以便通知一直可见

确保 R.drawable.your_small_icon 引用了你的小图标资源。

  1. 如果你不需要通知功能,你可以尝试将通知相关的代码删除或者禁用。不过,这可能会影响你的应用的某些功能。

请注意,Jitsi Meet SDK 可能会自动创建通知,所以你需要查看 SDK 的文档,了解如何配置和自定义通知,以适应你的应用需求。如果你无法找到相关的配置选项,你可能需要联系 Jitsi Meet SDK 的支持团队或社区,以获取更多帮助。

英文:
java.lang.RuntimeException: Unable to start service org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService@25a9391 with Intent { cmp=com.example.mlimivirtualmeeting/org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService (has extras) }: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=JitsiOngoingConferenceChannel pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0xa color=0x00000000 category=call actions=2 vis=PUBLIC)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3650)
at android.app.ActivityThread.-wrap20(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1786)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:6737)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=JitsiOngoingConferenceChannel pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0xa color=0x00000000 category=call actions=2 vis=PUBLIC)
at android.app.NotificationManager.notifyAsUser(NotificationManager.java:320)
at android.app.NotificationManager.notify(NotificationManager.java:289)
at android.app.NotificationManager.notify(NotificationManager.java:273)
at org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService.onStartCommand(JitsiMeetOngoingConferenceService.java:135)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3624)
at android.app.ActivityThread.-wrap20(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1786) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:166) 
at android.app.ActivityThread.main(ActivityThread.java:6737) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 
I/Camera: handleMessage: 16
I/BufferQueueProducer: [SurfaceTexture-1-7886-0](this:0x81c05000,id:0,api:4,p:412,c:7886) queueBuffer: slot 3 is dropped, handle=0x8ef069c0
E/JitsiMeetSDK: JitsiMeetUncaughtExceptionHandler FATAL ERROR
java.lang.RuntimeException: Unable to start service org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService@25a9391 with Intent { cmp=com.example.mlimivirtualmeeting/org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService (has extras) }: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=JitsiOngoingConferenceChannel pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0xa color=0x00000000 category=call actions=2 vis=PUBLIC)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3650)
at android.app.ActivityThread.-wrap20(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1786)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:6737)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=JitsiOngoingConferenceChannel pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0xa color=0x00000000 category=call actions=2 vis=PUBLIC)
at android.app.NotificationManager.notifyAsUser(NotificationManager.java:320)
at android.app.NotificationManager.notify(NotificationManager.java:289)
at android.app.NotificationManager.notify(NotificationManager.java:273)
at org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService.onStartCommand(JitsiMeetOngoingConferenceService.java:135)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3624)
at android.app.ActivityThread.-wrap20(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1786) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:166) 
at android.app.ActivityThread.main(ActivityThread.java:6737) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 
java.lang.RuntimeException: Unable to start service org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService@25a9391 with Intent { cmp=com.example.mlimivirtualmeeting/org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService (has extras) }: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=JitsiOngoingConferenceChannel pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0xa color=0x00000000 category=call actions=2 vis=PUBLIC)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3650)
at android.app.ActivityThread.-wrap20(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1786)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:6737)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=JitsiOngoingConferenceChannel pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0xa color=0x00000000 category=call actions=2 vis=PUBLIC)
at android.app.NotificationManager.notifyAsUser(NotificationManager.java:320)
at android.app.NotificationManager.notify(NotificationManager.java:289)
at android.app.NotificationManager.notify(NotificationManager.java:273)
at org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService.onStartCommand(JitsiMeetOngoingConferenceService.java:135)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3624)
//MY MainActivity incase YOU MAY NEED TO SEE IT
package com.example.mlimivirtualmeeting.activities;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.mlimivirtualmeeting.R;
import com.example.mlimivirtualmeeting.network.ApiClient;
import com.example.mlimivirtualmeeting.network.ApiService;
import com.example.mlimivirtualmeeting.utilities.Constants;
import org.jitsi.meet.sdk.JitsiMeetActivity;
import org.jitsi.meet.sdk.JitsiMeetConferenceOptions;
import org.json.JSONArray;
import org.json.JSONObject;
import java.net.URL;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class IncomingInvitationActivity extends AppCompatActivity {
private String meetingType = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_incoming_invitation);
ImageView imageMeetingType = findViewById(R.id.imageMeetingType);
meetingType = getIntent().getStringExtra(Constants.REMOTE_MSG_MEETING_TYPE);
if(meetingType != null){
if(meetingType.equals("video")){
imageMeetingType.setImageResource(R.drawable.ic_video);
}else {
imageMeetingType.setImageResource(R.drawable.ic_audio);
}
}
TextView textFirstChat = findViewById(R.id.textFirstChar);
TextView textUsername = findViewById(R.id.textUsername);
TextView textEmail = findViewById(R.id.textEmail);
String firstName = getIntent().getStringExtra(Constants.KEY_FIRST_NAME);
if(firstName != null){
textFirstChat.setText(firstName.substring(0,1));
}
textUsername.setText(String.format(
"%s %S",
firstName,
getIntent().getStringExtra(Constants.KEY_LAST_NAME)
));
textEmail.setText(getIntent().getStringExtra(Constants.KEY_EMAIL));
ImageView imageAcceptInvitation = findViewById(R.id.imageAcceptInvitation);
imageAcceptInvitation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendInvitationResponse(
Constants.REMOTE_MSG_INVITATION_ACCEPTED,
getIntent().getStringExtra(Constants.REMOTE_MSG_INVITER_TOKEN)
);
}
});
ImageView imageRejectInvitation = findViewById(R.id.imageRejectInvitation);
imageRejectInvitation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendInvitationResponse(
Constants.REMOTE_MSG_INVITATION_REJECTED,
getIntent().getStringExtra(Constants.REMOTE_MSG_INVITER_TOKEN)
);
}
});
}
private void sendInvitationResponse(String type, String receiverToken){
try {
JSONArray tokens = new JSONArray();
tokens.put(receiverToken);
JSONObject body = new JSONObject();
JSONObject data = new JSONObject();
data.put(Constants.REMOTE_MSG_TYPE, Constants.REMOTE_MSG_INVITATION_RESPONSE);
data.put(Constants.REMOTE_MSG_INVITATION_RESPONSE, type);
body.put(Constants.REMOTE_MSG_DATA, data);
body.put(Constants.REMOTE_MSG_REGISTRATION_IDS, tokens);
sendRemoteMessage(body.toString(), type);
}catch (Exception exception){
Toast.makeText(this, exception.getMessage(), Toast.LENGTH_SHORT).show();
finish();
}
}
private void sendRemoteMessage(String remoteMassageBody, String type){
ApiClient.getClient().create(ApiService.class).sendRemoteMessage(
Constants.getRemoteMessageHeaders(), remoteMassageBody
).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()){
if(type.equals(Constants.REMOTE_MSG_INVITATION_ACCEPTED)){
//Toast.makeText(IncomingInvitationActivity.this, "Invitation Accepted", Toast.LENGTH_SHORT).show();
try {
URL serverURL = new URL("https://meet.jit.si");
JitsiMeetConferenceOptions.Builder builder = new JitsiMeetConferenceOptions.Builder();
builder.setServerURL(serverURL);
builder.setFeatureFlag("welcomepage.enabled", false);
builder.setRoom(getIntent().getStringExtra(Constants.REMOTE_MSG_MEETING_ROOM));
if(meetingType.equals("audio")){
builder.setVideoMuted(true);
}
JitsiMeetActivity.launch(IncomingInvitationActivity.this, builder.build());
finish();
}catch (Exception exception){
Toast.makeText(IncomingInvitationActivity.this, exception.getMessage(), Toast.LENGTH_SHORT).show();
finish();
}
} else{
Toast.makeText(IncomingInvitationActivity.this, "Invitation Rejected", Toast.LENGTH_SHORT).show();
finish();
}
}else {
Toast.makeText(IncomingInvitationActivity.this, response.message(), Toast.LENGTH_SHORT).show();
finish();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
Toast.makeText(IncomingInvitationActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
finish();
}
});
}
private BroadcastReceiver invitationResponseReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String type = intent.getStringExtra(Constants.REMOTE_MSG_INVITATION_RESPONSE);
if(type != null){
if(type.equals(Constants.REMOTE_MSG_INVITATION_CANCELLED)){
Toast.makeText(context, "Invitation Cancelled", Toast.LENGTH_SHORT).show();
finish();
}
}
}
};
@Override
protected void onStart(){
super.onStart();
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(
invitationResponseReceiver,
new IntentFilter(Constants.REMOTE_MSG_INVITATION_RESPONSE)
);
}
@Override
protected void onStop(){
super.onStop();
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(
invitationResponseReceiver
);
}
}

Am building a conference android app using Jitsi meet SDK. In my code I do not necessarily have Notification, but the error says *Invalid notification (no valid small icon). Maybe this notification was implemented in Jitsi. I have seen some solutions on similar problems but non really fits this. Can anyone help me get rid of this error?

答案1

得分: 1

创建一个名为"ic_notification"的通知图标。
步骤:

  1. 在drawable文件夹上右键单击,然后选择新建->图像资产。
  2. 从图标类型中选择通知图标。
  3. 注意:图标的名称必须为ic_notification

现在尝试运行你的项目。

无效通知(没有有效的小图标)。在Jitsi Meet中遇到此错误。

英文:

Create a notification icon with the name "ic_notification".
Steps :

  1. Right click drawable folder and click New->Image Asset
  2. Select Notification icons from icon type.
  3. Note : the name of the icon must be : ic_notification

Now try running your project.

无效通知(没有有效的小图标)。在Jitsi Meet中遇到此错误。

huangapple
  • 本文由 发表于 2023年1月9日 15:35:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/75054278.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定