Android BroadcastReceiver的get方法

Android get method of BroadcastReceiver

如何将 BroadcastReceiver 中的方法放入 Fragment 中? 甚至有可能吗? 接收者:

public class Receiver extends BroadcastReceiver {


    public void test(Context c) {
     ....
    }

}

片段:

public class Test extends Fragment {
...
}

所以出现错误:

Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference at

com.test.tab.MyReceiver.sendNotificationIfTimeEnd01(MyReceiver.java:47)

        at com.test.tab.Juli.broadcastIntent(Juli.java:54)

        at com.test.tab.Juli.onCreateView(Juli.java:188)

这些行的代码是: 在接收器中:

    public void sendNotificationIfTimeEnd01(Context c) {
        Context context = c.getApplicationContext();
        Intent intent01 = new Intent(context, MainActivity.class);
....
}

在片段中:

    receiver.sendNotificationIfTimeEnd01(context);
    broadcastIntent();

编辑升级代码: 片段:

public class FragmentTest extends Fragment {

    private Context context;


    IntentFilter filter = new IntentFilter("com.example.Broadcast");
MyReceiver receiver = new MyReceiver();

// Call this method when the condition is met.
public void broadcastIntent() {
    Intent intent = new Intent();
    intent.setAction("com.example.Broadcast");
    getActivity().sendBroadcast(intent);
}

...

    if (diffDays <= 0 && diffHours <= 0 && diffMinutes <= 0) {
        ((TextView) android.findViewById(R.id.test)).setText("test works");
        if (!notification043 && !buttonColor01.equals("red01")) {
            broadcastIntent();
            editor.putBoolean("notification43", true);
            editor.apply();
        }
    } 

}

我的收件人:

public class MyReceiver extends BroadcastReceiver {
    public static final int NOTIFICATION_ID_01 = 1;

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

    public void sendNotificationIfTimeEnd01(Context c) {
        Context context = c.getApplicationContext();
        Intent intent01 = new Intent(context, MainActivity.class);
        PendingIntent pendingIntent01 = PendingIntent.getActivity(context, 1, intent01, 0);
        NotificationCompat.Builder builder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_stat_notification)
                        .setContentIntent(pendingIntent01)
                        .setAutoCancel(true)
                        .setLargeIcon(BitmapFactory.decodeResource(c.getResources(), R.drawable.ic_launcher))
                        .setContentTitle(testArray[0])
                        .setContentText("testready")
                        .setSubText("click here");
        NotificationManager notificationManager =
                (NotificationManager) c.getSystemService(c.NOTIFICATION_SERVICE);
        notificationManager.notify(NOTIFICATION_ID_01, builder.build());
        try {
            Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            Ringtone r = RingtoneManager.getRingtone(c.getApplicationContext(), notification);
            r.play();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

实际上,您可以使用 Intents:

public class Test extends Fragment {
    ...
    // Call this method when the condition is met.
    public void broadcastIntent() {
        Intent intent = new Intent();
        intent.setAction("com.example.Broadcast");
        getActivity().sendBroadcast(intent);
    }
}

并声明您的广播接收器可以通过清单对这种 Intent 做出反应:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.BroadcastDetector"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <receiver android:name="MyReceiver" >
            <intent-filter>
                <action android:name="com.example.Broadcast" >
                    </action>
            </intent-filter>
        </receiver>
    </application>
</manifest>

或以编程方式

IntentFilter filter = new IntentFilter("com.example.Broadcast");

MyReceiver receiver = new MyReceiver();
getActivity().registerReceiver(receiver, filter);

然后就可以在receiver中拦截这个Intent了:

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub

    }
}