1

Androidの通知領域に通知メッセージを表示したい。これで、アプリケーションのタイトルのみが表示されます。logcat を調べていますが、System.out.println(newMessage); 行からの System.out 出力が表示されません。

私はこのクラスを持っています:

/**
 * Author       : Taufan E.
 * App Name     : The Restaurant App
 * Release Date : October 2012
 */
package com.the.restaurant;


public class Home extends Activity {


    String gcm_regId="";

    static DBHelper dbhelper;
    MainMenuAdapter mma;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);




        //GCMRegistrar.unregister(this);
        // Make sure the device has the proper dependencies.
                GCMRegistrar.checkDevice(this);

                // Make sure the manifest was properly set - comment out this line
                // while developing the app, then uncomment it when it's ready.
                //GCMRegistrar.checkManifest(this);



                gcm_regId = GCMRegistrar.getRegistrationId(this);
                if(gcm_regId.equals("")){
                    GCMRegistrar.register(this, Utils.SENDER_ID);
                }
                System.out.println(gcm_regId);

                registerReceiver(mHandleMessageReceiver, new IntentFilter("com.the.restaurant.DISPLAY_MESSAGE"));

        if (!Utils.isNetworkAvailable(Home.this)) {
            Toast.makeText(Home.this, getString(R.string.no_internet), Toast.LENGTH_SHORT).show();
        }

        mma = new MainMenuAdapter(this);
        dbhelper = new DBHelper(this);
        listMainMenu.setAdapter(mma);

    }
    @Override
    protected void onPause(){
        super.onPause();
        unregisterReceiver(mHandleMessageReceiver);
    }

    @Override
    protected void onResume(){
        super.onResume();
        registerReceiver(mHandleMessageReceiver, new IntentFilter("com.the.restaurant.DISPLAY_MESSAGE"));
    }

    private void displayNotification(final Context theContext,String message){
        long when = System.currentTimeMillis();
        int icon = R.drawable.cover_image;

        NotificationManager notificationManager = (NotificationManager)
                theContext.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(icon, message, when);

        String title = theContext.getString(R.string.app_name);

        Intent notificationIntent = new Intent();
        // set intent so it does not start a new activity
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent intent = PendingIntent.getActivity(theContext, 0, notificationIntent, 0);
        notification.setLatestEventInfo(theContext, title, message, intent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        // Play default notification sound
        notification.defaults |= Notification.DEFAULT_SOUND;

        // Vibrate if vibrate is enabled
        notification.defaults |= Notification.DEFAULT_VIBRATE;
        notificationManager.notify(0, notification);   
    }

    private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String newMessage = intent.getExtras().getString("rezervare");

            // Waking up mobile if it is sleeping
            WakeLocker.acquire(getApplicationContext());

            /**
             * Take appropriate action on this message
             * depending upon your app requirement
             * For now i am just displaying it on the screen
             * */

            // Showing received message
            //lblMessage.append(newMessage + "\n");
            System.out.println(newMessage);
            Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show();

            displayNotification(context,newMessage);
            //sendnotification("The Restaurant App","Mesaj");
            //GCMRegistrar.unregister(Reservation.class);
            // Releasing wake lock
            WakeLocker.release();
        }
    };
}
4

2 に答える 2

0

あなたの質問によると、次の行からの出力が表示されません。

     System.out.println(newMessage);

また、次のメソッドが実行された後に表示される通知を表示したい:

    displayNotification(context,newMessage);

答え:

実行されると予想されるコードは、BroadcastReceiver の onReceive メソッドの下にあります。つまり、このメソッド onReceive は、行の onCreate メソッドに登録されている特別なインテントが生成されたときに呼び出されます。

  registerReceiver(mHandleMessageReceiver, new IntentFilter("com.the.restaurant.DISPLAY_MESSAGE"));

次の方法でインテントをブロードキャストできます。

   Intent intent = new Intent();
   intent.setAction("com.the.restaurant.DISPLAY_MESSAGE");
   sendBroadcast(intent);  ///sendBroadcast is a Context (Activity) method
于 2013-03-18T22:54:08.373 に答える
0

最初に通知を作成する必要があります。

// Pop up Notification
NotificationCompat.Builder mBuilder =  new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("New Notification Title")
        .setContentText("This is notification content.");
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(this, ClassToLaunch.class);

// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(ClassToLaunch.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(
            0,
            PendingIntent.FLAG_UPDATE_CURRENT
        );

mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify("tag", mBuilder.build()); 
于 2013-03-18T22:35:55.557 に答える