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
}
}
如何将 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
}
}