2015-09-06 66 views
1

如何将我的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(); 
     } 
    } 

} 
+0

我想这是不可能的,因为'BroadcastReceiver's由操作系统本身实例化。你想做什么,为什么你需要这种方法? –

+0

我想在我的广播接收器中有一个方法发生,如果发生在我的片段内的情况 –

+0

条件是什么?这是一个事件,你已经注册了你的'BroadcastReceiver'吗? –

回答

2

其实,你可以使用意图:

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); 
    } 
} 

,并宣布你的广播接收器能够反应到这种Inten牛逼或者通过清单:

<?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); 

然后你就可以在接收器截获此意图:

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

    } 
} 
+0

好吧我试试这个谢谢 –

+0

你的意思是registerReceiver里面我的广播接收器的方法?我无法解决它。 –

+0

没有片段写?仍然不行=) –