如何将我的BroadcastReceiver中的方法放入我的片段? 或者它甚至有可能吗? 接收机:Android获取BroadcastReceiver的方法
public class Receiver extends BroadcastReceiver {
public void test(Context c) {
....
}
}
片段:
public class Test extends Fragment {
...
}
因此,一个错误出现了:
尝试调用虚拟方法“android.content.Context android.content.Context.getApplicationContext( )'在空对象上 参考 在
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();
EDIT UPGRADED CODE: 片段:
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();
}
}
}
MyReceiver:
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();
}
}
}
我想这是不可能的,因为'BroadcastReceiver's由操作系统本身实例化。你想做什么,为什么你需要这种方法? –
我想在我的广播接收器中有一个方法发生,如果发生在我的片段内的情况 –
条件是什么?这是一个事件,你已经注册了你的'BroadcastReceiver'吗? –