Есть ли способ вызвать метод, который находится в 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)
Можете ли вы разместить больше своего Logcat, пожалуйста? Должны быть какие-то строки под строкой, которую вы публикуете ... –
В конце концов, вы должны иметь возможность просто вызвать MainActivity.this.TestMethode() из приемника, поскольку switchButtonListener - это класс Inner. –
Это статический класс, поэтому он не позволит мне добавить MainActivity.this.TestMethode(); Он должен быть статическим классом, иначе BroadCastReceiver выдает ошибку. Спасибо – User2014