2016-12-04 10 views
1

このコードは、アプリケーションがフォアグラウンドになっている間に実行され、新しいメッセージのビルディング通知が実行されています。しかし、私のアプリケーションがバックグラウンドにある間、新しいチャットメッセージの通知を実装したいと思います。だから私によれば、バックグラウンドで実行するために「サービス」を使用すると起こりますが、実装するのは混乱します。あらゆるアイデアやアドバイスをどのように実装するか。バックグラウンドでチャットメッセージを取得する

package com.gyaanify.groups.campfire; 

import android.app.NotificationManager; 
import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.v4.app.NotificationCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.text.format.DateFormat; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.firebase.ui.database.FirebaseListAdapter; 
import com.google.android.gms.appindexing.Action; 
import com.google.android.gms.appindexing.AppIndex; 
import com.google.android.gms.appindexing.Thing; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.firebase.database.FirebaseDatabase; 

import static android.R.id.message; 

public class chat extends AppCompatActivity { 

    private FirebaseListAdapter<ChatMessage> adapter; 
    String domain; 
    String name; 
    String name_desig; 
    String desig; 
    String mesg; 
    /** 
    * ATTENTION: This was auto-generated to implement the App Indexing API. 
    * See https://g.co/AppIndexing/AndroidStudio for more information. 
    */ 
    private GoogleApiClient client; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_chat); 

     domain = getIntent().getStringExtra("domain"); 
     name = getIntent().getStringExtra("user"); 
     desig = getIntent().getStringExtra("desig"); 

     name_desig = name + " [" + desig + "]"; 

     displayChatMessages(); 

     FloatingActionButton fab = 
       (FloatingActionButton) findViewById(R.id.fab); 

     fab.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View view) { 
             EditText input = (EditText) findViewById(R.id.input); 
             mesg = input.getText().toString(); 
             getmsg(); 

             // Read the input field and push a new instance 
             // of ChatMessage to the Firebase database 
             FirebaseDatabase.getInstance() 
               .getReference(domain) 
               .push() 
               .setValue(new ChatMessage(input.getText().toString(), name_desig)); 

             // Clear the input 


             input.setText(""); 
            } 
           } 
     ); 

     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    } 

    public String getmsg() { 

     return mesg; 


    } 

    private void displayChatMessages() { 

     ListView listOfMessages = (ListView) findViewById(R.id.list_of_messages); 

     adapter = new FirebaseListAdapter<ChatMessage>(this, ChatMessage.class, 
       R.layout.message, FirebaseDatabase.getInstance().getReference(domain)) { 
      @Override 
      protected void populateView(View v, ChatMessage model, int position) { 
       // Get references to the views of message.xml 
       TextView messageText = (TextView) v.findViewById(R.id.message_text); 


       String abc = messageText.getNotification().getBody(); 

       NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
         .setSmallIcon(R.mipmap.ic_launcher) 
         .setContentTitle("Firebase Push Notification") 
         .setContentText(abc) 
         .setAutoCancel(true) 
         .setSound(defaultSoundUri) 
         .setContentIntent(pendingIntent); 

       NotificationManager notificationManager = 
         (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

       notificationManager.notify(0, notificationBuilder.build()); 


       TextView messageUser = (TextView) v.findViewById(R.id.message_user); 
       TextView messageTime = (TextView) v.findViewById(R.id.message_time); 

       // Set their text 
       messageText.setText(model.getMessageText()); 
       messageUser.setText(model.getMessageUser()); 

       // Format the date before showing it 
       messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", 
         model.getMessageTime())); 
      } 
     }; 

     listOfMessages.setAdapter(adapter); 

    } 

    /** 
    * ATTENTION: This was auto-generated to implement the App Indexing API. 
    * See https://g.co/AppIndexing/AndroidStudio for more information. 
    */ 
    public Action getIndexApiAction() { 
     Thing object = new Thing.Builder() 
       .setName("chat Page") // TODO: Define a title for the content shown. 
       // TODO: Make sure this auto-generated URL is correct. 
       .setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]")) 
       .build(); 
     return new Action.Builder(Action.TYPE_VIEW) 
       .setObject(object) 
       .setActionStatus(Action.STATUS_TYPE_COMPLETED) 
       .build(); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     client.connect(); 
     AppIndex.AppIndexApi.start(client, getIndexApiAction()); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 

     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     AppIndex.AppIndexApi.end(client, getIndexApiAction()); 
     client.disconnect(); 
    } 
} 
+0

実際に実装する混乱についてはどうでしょうか? – iSandeep

+0

このアクティビティをバックグラウンドサービスに転送する方法。概要は、私がこの作業を行うのに役立ちます。 – Sumiet

答えて

1

まず、必要に応じてServiceまたはIntentServiceでクラスを拡張します。

startService(new Intent(getApplicationContext(), MyApp.class)); 

そして、あなたのサービスを停止する:

<service 
    android:name=".MyApp" 
    android:exported="false">    
</service> 

は、その後、あなたが意図を使用してサービスを開始することができ、例えば、あなたはその後、クラス名のMyAppを持って、AndroidManifest.xmlファイルに変更を加える

stopService(new Intent(getApplicationContext(), MyApp.class)); 
+0

このサービスは、.chatがサービスに割り当てられないというエラーを出すため、外部に書き込むため、同じアクティビティタグ内または外部に含める必要があります。ありがとう、兄。 – Sumiet

+0

@Sumietあなたはいくつかの活動タグの中ではなく、それをアプリケーションタグの中に含める必要があります。サービスでクラスを拡張していないため、このエラーが発生しています。 –

+0

@Sumietあなたが私の答えを見つけたら助けてください。それを受け入れるかupvoteしてください。ありがとう:) –

関連する問題