Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何在应用程序关闭时显示通知?_Java_Android_Android Notifications - Fatal编程技术网

Java 我如何在应用程序关闭时显示通知?

Java 我如何在应用程序关闭时显示通知?,java,android,android-notifications,Java,Android,Android Notifications,我有一个视频通话应用程序(叫做FtoF,目前在play store上)。我想在一个用户呼叫另一个用户时显示一个通知,我这样做了(第110-132行和第255行),问题是这只在应用程序打开时起作用。即使在应用程序关闭的情况下,我如何使通知生效? 我给你留下密码: 调用Activity.java public class CallingActivity extends AppCompatActivity { private TextView nameContact; private

我有一个视频通话应用程序(叫做FtoF,目前在play store上)。我想在一个用户呼叫另一个用户时显示一个通知,我这样做了(第110-132行和第255行),问题是这只在应用程序打开时起作用。即使在应用程序关闭的情况下,我如何使通知生效? 我给你留下密码:

调用Activity.java

public class CallingActivity extends AppCompatActivity {
    private TextView nameContact;
    private ImageView profileImage;
    private ImageView cancelCallBtn, acceptCallBtn; //private ImageView cancelCallBtn, acceptCallBtn;
    private String callingId="", ringingId="";
    private String reciverUserId="", receiverUserImage="", receiverUserName="";
    private String senderUserId="", senderUserImage="", senderUserName="", checker="";
    private DatabaseReference userRef;
    private MediaPlayer mediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calling);
        senderUserId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        reciverUserId = getIntent().getExtras().get("visit_user_id").toString();
        userRef = FirebaseDatabase.getInstance().getReference().child("Users");
        nameContact = findViewById(R.id.name_calling);
        profileImage = findViewById(R.id.profile_image_calling);
        cancelCallBtn = findViewById(R.id.cancel_call);
        acceptCallBtn = findViewById(R.id.make_call);
        cancelCallBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checker = "clicked";
                cancelCallingUser();
            }
        });
        acceptCallBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final HashMap<String, Object> callingPickUpMap = new HashMap<>();
                callingPickUpMap.put("picked", "picked");
                userRef.child(senderUserId).child("Ringing")
                        .updateChildren(callingPickUpMap)
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                Intent intent = new Intent(CallingActivity.this, VideoCallActivity.class);
                                startActivity(intent);
                            }
                        });
            }
        });
        getAndSetUserProfileInfo();
    }

    private void addNotification() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            NotificationChannel channel =
                    new NotificationChannel("MyNotifications", "MyNotifications", NotificationManager.IMPORTANCE_DEFAULT);
            NotificationManager manager = getSystemService(NotificationManager.class);
            manager.createNotificationChannel(channel);
        }
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "MyNotifications")
                .setContentTitle("Chiamata in arrivo da "+ receiverUserName)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setAutoCancel(true)
                .setContentText("Apri FtoF per partecipare alla videochiamata");
        NotificationManagerCompat manager = NotificationManagerCompat.from(this);
        manager.notify(999, builder.build());
    }

    private void getAndSetUserProfileInfo() {
        userRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.child(reciverUserId).exists()){
                    receiverUserImage = dataSnapshot.child(reciverUserId).child("image").getValue().toString();
                    receiverUserName = dataSnapshot.child(reciverUserId).child("name").getValue().toString();
                    nameContact.setText(receiverUserName);
                    Picasso.get().load(receiverUserImage).placeholder(R.drawable.profile_image).into(profileImage);
                }
                if(dataSnapshot.child(senderUserId).exists()){
                    senderUserImage = dataSnapshot.child(senderUserId).child("image").getValue().toString();
                    senderUserName = dataSnapshot.child(senderUserId).child("name").getValue().toString();
                }
                TextView info_txt = (TextView) findViewById(R.id.txt);
                info_txt.setText("in attesa che " + receiverUserName + " accetti l'invito..."); //concatenazione per testo sotto al nome
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) { }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        userRef.child(reciverUserId)
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (!checker.equals("clicked") && !dataSnapshot.hasChild("Calling") && !dataSnapshot.hasChild("Ringing")){
                            final HashMap<String, Object> callingInfo = new HashMap<>();
                            callingInfo.put("calling", reciverUserId);
                            userRef.child(senderUserId)
                                    .child("Calling")
                                    .updateChildren(callingInfo)
                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if (task.isSuccessful()){
                                                final HashMap<String, Object> ringingInfo = new HashMap<>();
                                                ringingInfo.put("ringing", senderUserId);
                                                userRef.child(reciverUserId)
                                                        .child("Ringing")
                                                        .updateChildren(ringingInfo);
                                            }
                                        }
                                    });
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) { }
                });

        userRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.child(senderUserId).hasChild("Ringing") && !dataSnapshot.child(senderUserId).hasChild("Calling")){
                    addNotification();
                    acceptCallBtn.setVisibility(View.VISIBLE);
                }
                if (dataSnapshot.child(reciverUserId).child("Ringing").hasChild("picked"))
                {
                    Intent intent = new Intent(CallingActivity.this, VideoCallActivity.class);
                    startActivity(intent);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) { }
        });
    }

    private void cancelCallingUser() {
        //sender
        userRef.child(senderUserId)
                .child("Calling")
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists() && dataSnapshot.hasChild("calling"))
                        {
                            callingId = dataSnapshot.child("calling").getValue().toString();
                            userRef.child(callingId)
                                    .child("Ringing")
                                    .removeValue()
                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if (task.isSuccessful()){
                                                userRef.child(senderUserId)
                                                        .child("Calling")
                                                        .removeValue()
                                                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                            @Override
                                                            public void onComplete(@NonNull Task<Void> task) {
                                                                startActivity(new Intent(CallingActivity.this, RegistrationActivity.class));
                                                                finish();
                                                            }
                                                        });
                                            }
                                        }
                                    });
                        } else {
                            startActivity(new Intent(CallingActivity.this, RegistrationActivity.class));
                            finish();
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                    }
                });
        //receiver
        userRef.child(senderUserId)
                .child("Ringing")
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists() && dataSnapshot.hasChild("ringing"))

                        {
                            ringingId = dataSnapshot.child("ringing").getValue().toString();
                            userRef.child(ringingId)
                                    .child("Calling")
                                    .removeValue()
                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if (task.isSuccessful()){
                                                userRef.child(senderUserId)
                                                        .child("Ringing")
                                                        .removeValue()
                                                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                            @Override
                                                            public void onComplete(@NonNull Task<Void> task) {
                                                                startActivity(new Intent(CallingActivity.this, RegistrationActivity.class));
                                                                finish();
                                                            }
                                                        });
                                            }
                                        }
                                    });
                        }
                        else {
                            startActivity(new Intent(CallingActivity.this, RegistrationActivity.class));
                            finish();
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                    }
                });
    }
}
公共类调用活动扩展了AppCompatActivity{
私有文本视图名称联系人;
私有图像查看配置文件图像;
private ImageView cancelCallBtn,acceptCallBtn;//private ImageView cancelCallBtn,acceptCallBtn;
私有字符串callingId=“”,ringingId=“”;
私有字符串reciverUserId=“”,receiverUserImage=“”,receiverUserName=“”;
私有字符串senderUserId=“”,senderUserImage=“”,senderUserName=“”,checker=“”;
私有数据库引用userRef;
私人媒体播放器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_调用);
senderUserId=FirebaseAuth.getInstance().getCurrentUser().getUid();
reciverUserId=getIntent().getExtras().get(“访问用户id”).toString();
userRef=FirebaseDatabase.getInstance().getReference().child(“用户”);
nameContact=findViewById(R.id.name\u调用);
profileImage=findviewbyd(R.id.profile\u image\u调用);
cancelCallBtn=findviewbyd(R.id.cancel\u call);
acceptCallBtn=findViewById(R.id.make_call);
cancelCallBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
checker=“单击”;
取消Callinguser();
}
});
acceptCallBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最终HashMap callingPickUpMap=新HashMap();
调用pickupmap.put(“拾取”、“拾取”);
userRef.child(senderUserId).child(“铃声”)
.updateChildren(调用PickupMap)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
意向意向=新意向(调用Activity.this、VideoCallActivity.class);
星触觉(意向);
}
});
}
});
getAndSetUserProfileInfo();
}
私有void addNotification(){
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.O){
通知频道=
新建NotificationChannel(“MyNotifications”、“MyNotifications”、NotificationManager.IMPORTANCE\u DEFAULT);
NotificationManager=getSystemService(NotificationManager.class);
manager.createNotificationChannel(频道);
}
NotificationCompat.Builder=新建NotificationCompat.Builder(此“MyNotifications”)
.setContentTitle(“arrivo da中的Chiamata”+接收方用户名)
.setSmallIcon(R.mipmap.ic_启动器)
.setAutoCancel(真)
.setContentText(“每一方的Apri FtoF alla videochiamata”);
NotificationManagerCompat manager=来自(此)的NotificationManagerCompat;
manager.notify(999,builder.build());
}
私有void getAndSetUserProfileInfo(){
userRef.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.child(reciverUserId).exists()){
receiverUserImage=dataSnapshot.child(ReceiverUserId).child(“图像”).getValue().toString();
receiverUserName=dataSnapshot.child(ReceiverUserId).child(“名称”).getValue().toString();
nameContact.setText(接收方用户名);
Picasso.get().load(receiverUserImage).placeholder(R.drawable.profile\u image).into(profileImage);
}
if(dataSnapshot.child(senderUserId.exists()){
senderUserImage=dataSnapshot.child(senderUserId).child(“图像”).getValue().toString();
senderUserName=dataSnapshot.child(senderUserId).child(“名称”).getValue().toString();
}
TextView info_txt=(TextView)findViewById(R.id.txt);
info_txt.setText(“在attesa che中”+接收者用户名+“accetti l'invito…”);//每个testo sotto al nome的concatenazione
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){}
});
}
@凌驾
受保护的void onStart(){
super.onStart();
userRef.child(reciverUserId)
.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
如果(!checker.equals(“单击”)和&!dataSnapshot.hasChild(“调用”)和&!dataSnapshot.hasChild(“响铃”)){
final HashMap callingInfo=新HashMap();
callingInfo.put(“调用”,receiveruserid);
userRef.child(senderUserId)
.儿童(“呼叫”)
.updateChildren(callingInfo)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
最终哈希映射
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.conta.ftof">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />

    <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/AppTheme">
        <activity android:name=".donate" />
        <activity android:name=".VideoCallActivity" />
        <activity android:name=".CallingActivity" />
        <activity android:name=".ProfileActivity" />
        <activity android:name=".FindPeopleActivity" />
        <activity android:name=".NotificationsActivity" />
        <activity android:name=".SettingsActivity" />
        <activity
            android:name=".ContactsActivity"
            android:label="@string/title_activity_main" />
        <activity android:name=".RegistrationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-3400243939195187~6852949310"/>

        <receiver android:name=".ReminderBroadcast"/>
    </application>
</manifest>