2014-09-18 4 views
0

Есть ли способ вызвать метод, который находится в MainActivity из BroadcastReceiver?Есть ли способ вызвать метод из MainActivity внутри BroadCastReceiver onReceive?

Все, что я пытаюсь сделать, это быть в состоянии пропустить песню с Status Bar Notification.

AndroidManifest:

<receiver 
    android:name="MainActivity$switchButtonListener" /> 

MainActivity:

resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
    NotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);   

    RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.notification_remoteviews); 

    Notification mBuilder = new NotificationCompat.Builder(this) 
    .setSmallIcon(R.drawable.img_btn_next) 
    .setContentTitle("TEST")   
    .setWhen(System.currentTimeMillis()) 
    .setDefaults(Notification.DEFAULT_SOUND) 
    .setAutoCancel(false) 
    .setContent(notificationView).build(); 

    //this is the intent that is supposed to be called when the 
    //button is clicked 
    Intent switchIntent = new Intent(this, switchButtonListener.class); 
    PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 0, switchIntent, 0); 

    notificationView.setOnClickPendingIntent(R.id.closeOnFlash, pendingSwitchIntent); 

    NotificationManager.notify(1, mBuilder); 

..... 

...... 


//Method 
    public void TestMethod() { 
     Play(2); 
    } 

...... 

..... 


public static class switchButtonListener extends BroadcastReceiver { 
    private MainActivty mainActivity; 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     mainActivity = new MainActivty(); 
     mainActivity.TestMethod();  
    } 

} 

Я поместил этот Log.e ("MY_LOG" "" + "Registered") в OnReceive метода в BroadcastReceiver и он сделал шоу вверх.

Я разместил этот код Воспроизвести (2); в моем методе MainActivity Oncreate, и он работал нормально. Однако

Когда я разместил тот же код Play (2); в TestMethod, это дало мне NullPointerException ниже ..... Что происходит?

LogCat:

E/AndroidRuntime(889): java.lang.RuntimeException: Unable to start receiver main.activity.MainActivity$switchButtonListener: java.lang.NullPointerException 

Может кто-то пожалуйста, помогите?

Заранее спасибо.

Edit: добавлено более LogCat

09-18 06:35:43.864: E/AndroidRuntime(889): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2431) 
09-18 06:35:43.864: E/AndroidRuntime(889): at android.app.ActivityThread.access$1500(ActivityThread.java:141) 
09-18 06:35:43.864: E/AndroidRuntime(889): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1332) 
09-18 06:35:43.864: E/AndroidRuntime(889): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-18 06:35:43.864: E/AndroidRuntime(889): at android.os.Looper.loop(Looper.java:137) 
09-18 06:35:43.864: E/AndroidRuntime(889): at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-18 06:35:43.864: E/AndroidRuntime(889): at java.lang.reflect.Method.invokeNative(Native Method) 
09-18 06:35:43.864: E/AndroidRuntime(889): at java.lang.reflect.Method.invoke(Method.java:525) 
09-18 06:35:43.864: E/AndroidRuntime(889): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-18 06:35:43.864: E/AndroidRuntime(889): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-18 06:35:43.864: E/AndroidRuntime(889): at dalvik.system.NativeStart.main(Native Method) 
09-18 06:35:43.864: E/AndroidRuntime(889): Caused by: java.lang.NullPointerException 
09-18 06:35:43.864: E/AndroidRuntime(889): at main.activity.MainActivity.play(MainActivity.java:402) 
09-18 06:35:43.864: E/AndroidRuntime(889): at main.activity.MainActivity.TestMethod(MainActivity.java:661) 
09-18 06:35:43.864: E/AndroidRuntime(889): at main.activity.MainActivity$switchButtonListener.onReceive(MainActivity.java:648) 
09-18 06:35:43.864: E/AndroidRuntime(889): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2424) 
+0

Можете ли вы разместить больше своего Logcat, пожалуйста? Должны быть какие-то строки под строкой, которую вы публикуете ... –

+0

В конце концов, вы должны иметь возможность просто вызвать MainActivity.this.TestMethode() из приемника, поскольку switchButtonListener - это класс Inner. –

+0

Это статический класс, поэтому он не позволит мне добавить MainActivity.this.TestMethode(); Он должен быть статическим классом, иначе BroadCastReceiver выдает ошибку. Спасибо – User2014

ответ

2

Если ваш broadcastReceiver определяется внутри вашей деятельности, вы можете попробовать следующее:

MainActivity.this.TestMethod(); 

Это должно работать

Надеются, что это помогает.

+0

Я ввел этот код, но он говорит, что в приложении не доступен экземпляр экземпляра типа MainActivity. благодаря – User2014

Смежные вопросы