来自非活动类别的Android通知
我想从另一个类中调用MainActivity中的notify()方法。这是我做的:来自非活动类别的Android通知
public class MyAlarmService extends Service{
@Override
public IBinder onBind(Intent arg0)
{
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate()
{
// TODO Auto-generated method stub
super.onCreate();
}
@SuppressWarnings("static-access")
@Override
public void onStart(Intent intent, int startId)
{
super.onStart(intent, startId);
String title = "title";
String message = "message";
new MainActivity().Notify(title, message);
...
MainActivity:
public class MainActivity extends Activity {
NotificationManager manager;
Notification myNotication;
@Override
protected void onCreate(Bundle savedInstanceState) {
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
...
public void Notify(String notificationTitle, String notificationMessage){
Intent intent = new Intent("com.xxxx.app.MainActivity");
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 1, intent, 0);
Notification.Builder builder = new Notification.Builder(MainActivity.this);
builder.setAutoCancel(false);
builder.setTicker("this is ticker text");
builder.setContentTitle("Notification");
builder.setContentText("Text");
builder.setSmallIcon(R.drawable.infoicon);
builder.setContentIntent(pendingIntent);
builder.setOngoing(true);
builder.setSubText("This is subtext...");
builder.setNumber(100);
builder.build();
myNotication = builder.getNotification();
manager.notify(11, myNotication);
}
...
但我得到一个错误信息:
致命异常:主要 过程:com.xxxx.app,PID: 10311 java.lang.RuntimeException:无法使用Intent {cmp = com.xxxx.app/.MyAlarmService}启动服务[email protected]:java.lang.NullPointerException:尝试在android.app的android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3027) 上的null对象引用 上调用虚拟方法'java.lang.String android.content.Context.getPackageName()'。在android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper上使用ActivityThread.-wrap17(ActivityThread.java) $ android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1442) .loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:java.lang。 NullPointerException:尝试在android上的android.content.ContextWrapper.getPackageName(ContextWrapper.java:133) 上的null对象引用 上调用虚拟方法'java.lang.String android.content.Context.getPackageName()'。 app.PendingIntent.getActivity(PendingIntent.java:305) at android.app.PendingIntent.getActivity(PendingIntent.java:272) at com.xxxx.app.MainActivity.Notify( MainActivity.java:304) at com.xxxx.app.MyAlarmService.onStart(MyAlarmService.java:41) at android.app.Service.onStartCommand(Service.java:459) at android.app.ActivityThread.handleServiceArgs( (Handler.Handler.dispatchMessage)(HandlerMessage(ActivityThread.java:1442) )在android.app.ActivityThread.-wrap17(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1442) at android.os.Handler.dispatchMessage(Handler .java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit。Java的:616)
你可以做同样在以下几个方面:
1)复制通知方法到服务,并调用它,无论你需要为了触发通知,通知服务需要上下文或者活动或服务)
2)可以通过广播接收机
3)可以通过使用AIDL
触发所述通知在硒做从服务活动通信onStart()
方法中的rvice类,并使用Intent从MainActivity类中启动服务。另外,不要忘记在清单中声明你的服务。
下面是从活动启动服务的代码: Intent intent = new Intent(this, MyAlarmService.class); startService(intent);
1)复制,在service.and通知方法调用它,无论你需要的。为了触发通知,通知服务需要Context或者Activity或者服务) – Chaitu
'Intent intent = new Intent(“com.xxxx.app.MainActivity”);'这是一种制作Intent的方法,但它很容易出错。 –
除此之外,'new MainActivity()。Notify(title,message);'会导致错误,因为您不应该执行'new MainActivity()',因为它不受Android生命周期管理 –