6

Android アプリに通知を追加していますが、現時点ではテストするエミュレーターしかありません。通知を受信すると、GCMBaseIntentService サブクラス (GCMIntentService) の onMessage() メソッドが呼び出されます。ここから、表示する通知を作成します。エミュレーターをスタンバイ状態にすると、通知が表示されません (デバイスで聞こえるかどうかわかりません)。通知を作成する前に、WakeLock を呼び出してデバイスをスリープ解除する必要がありますか?

ありがとう

4

1 に答える 1

9

スタンバイ状態のエミュレーターがロックされたデバイスに相当するかどうかはわかりません。そうである場合は、デバイスがロックされている場合でも通知が表示されるようにするには、必ず WakeLock を呼び出す必要があります。

サンプルコードは次のとおりです。

@Override
protected void onMessage(Context context, Intent intent) {
    // Extract the payload from the message
    Bundle extras = intent.getExtras();
    if (extras != null) {
        String message = (String) extras.get("payload");
        String title = (String) extras.get("title");

        // add a notification to status bar
        NotificationManager mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Intent myIntent = new Intent(this,MyActivity.class);
        Notification notification = new Notification(R.drawable.coupon_notification, title, System.currentTimeMillis());
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification);
        contentView.setImageViewResource(R.id.image, R.drawable.gcm_notification);
        contentView.setTextViewText(R.id.title, title);
        contentView.setTextViewText(R.id.text, message);
        notification.contentView = contentView;
        notification.contentIntent = PendingIntent.getActivity(this.getBaseContext(), 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        mManager.notify(0, notification);
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
        wl.acquire(15000);
    }
}

もちろん、この権限をマニフェストに追加する必要があります:

<uses-permission android:name="android.permission.WAKE_LOCK" />
于 2013-04-23T15:50:08.237 に答える