从通知中的pendingIntent调用接收方

And*_*llo 2 android

所以我将代码更改为调用广播接收器,而不是调用主要活动

Intent notificationIntent = new Intent(context, com.plugin.statusNotificationForGCM.statusNotificationForGCMReceiver.class);

notificationIntent.putExtra(NOTIF_RESPOND, runThis);
notificationIntent.setAction(Intent.ACTION_VIEW);
notificationIntent = notificationIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

//contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
contentIntent = PendingIntent.getBroadcast(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)

问题是我在接收器中添加了它,但认为它没有运行。单击通知后看不到标签并登录控制台

public class statusNotificationForGCMReceiver extends BroadcastReceiver {
    private static final String TAG = "statusNOTIFICATIONReceiver";

    @Override
    public final void onReceive(Context context, Intent intent) {
        Log.v(TAG,"ASDFSJD FASDF ASDPFJA SDFPAUS DFPAS DFASDF");
    }
}
Run Code Online (Sandbox Code Playgroud)

我有什么想念的吗?我是否必须在清单文件中添加一些内容?

谢谢

Ali*_*Ali 5

您可能需要在清单中包含此内容:

合适的意图在其定义 <intent-filter>

<activity android:name="BroadcastIntents" android:label="@string/app_name"/>
    <receiver android:name="statusNotificationForGCMReceiver" android:label="@string/app_name">
       <intent-filter>
          <action android:name="android.test.BROADCAST" />
       </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

附加物:

通过意图过滤器,您可以告诉活动它可以/不能响应的活动(被意图调用时)。

public class InternalMessageReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context ctx, Intent intent) {
        String msg = intent.getStringExtra("message");
        Toast.makeText(ctx,msg,Toast.LENGTH_SHORT).show();
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在“活动”中调用它,例如单击一个按钮,如下所示:

private static final String ACTION = "android.test.BROADCAST";

public void onClick(View v) {
        /* Broadcast intent */
        Intent intent = new Intent(ACTION);
        intent.putExtra("message", msg);
        main_activity.sendBroadcast(intent);
}
Run Code Online (Sandbox Code Playgroud)