鍍金池/ 問答/C++  Android/ Android,service向broadCastReceiver傳遞數(shù)據(jù)為nu

Android,service向broadCastReceiver傳遞數(shù)據(jù)為null

在service中設(shè)置了一個鬧鐘,會通過intent傳遞一些數(shù)據(jù)啟動BroadCastReceiver,receiver中取到數(shù)據(jù),在通知欄顯示notification

Service代碼

public class RemindService extends Service {

    List<Remind> reminds;

    public RemindService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        String remindsStr = intent.getStringExtra("reminds");
        reminds = JSON.parseArray(remindsStr, Remind.class);
        AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
        for (Remind remind : reminds) {
            Intent intent1 = new Intent(getApplicationContext(), RemindReceiver.class);
            intent.putExtra("content", remind.getTitle());
            PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, intent1, 0);
            if (remind.getFrequencyType() == Remind.TYPE_ONCE) {
                manager.setExact(AlarmManager.RTC_WAKEUP, getAlarmTimeByRemind(remind), pi);
            } else {
                ...
            }
        }
        return super.onStartCommand(intent, flags, startId);
    }

BroadCastReceiver代碼:

public class RemindReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        LogUtil.d("content:" + intent.getStringExtra("content")); //此處獲取的context為null
        
        NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification.Builder(context)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("title")
                .setContentText(intent.getStringExtra("content"))
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(true)
                .build();
        manager.notify(1, notification);

這是AndroidManifest.xml

    <application
        android:name=".util.TApplication"
        android:allowBackup="true"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        ... //一些activity
        
        <service
            android:name=".service.RemindService"
            android:enabled="true"
            android:exported="false" />

        <receiver
            android:name=".receiver.RemindReceiver"
            android:enabled="true"
            android:exported="false"/>
    </application>

調(diào)試了半天不知道為什么。在Service的for循環(huán)中是remind.getTitle()有值的,調(diào)試時看到了。

回答
編輯回答
傲嬌范
Intent intent1 = new Intent(getApplicationContext(), RemindReceiver.class);
intent.putExtra**("content", remind.getTitle());
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, intent1, 0);

intent1 intent
            
            
2017年6月4日 06:35