我有一个Mainactivity类,它有一个notificationslistener(单独的类),当一个通知出现时,它调用我的gethtml类。他们都扩展活动,但startactivity在我的html类不起作用…(如果我复制和测试这段代码在我的MainActivity它工作得很好)..知道为什么吗?
这是主类:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter();
filter.addAction("com.kpbird.nlsexample.NOTIFICATION_LISTENER_EXAMPLE");
startService(new Intent(MainActivity.this, NLService.class));
Intent intent=new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
startActivity(intent);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
这是通知监听器
public class NLService extends NotificationListenerService {
@Override
public void onCreate() {
super.onCreate();
IntentFilter filter = new IntentFilter();
filter.addAction("com.kpbird.nlsexample.NOTIFICATION_LISTENER_SERVICE_EXAMPLE");
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
new Thread(new Runnable() {
public void run(){
Looper.prepare();
int cangethtml = 1;
try{
if(cangethtml==1){
cangethtml = 0; //only runs once
new html();
}
}finally{Looper.loop();}
};
}).start();
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {}
}
这是最后一个不通过startactivity打开网站的类。
public class html extends Activity{
public html() {
Intent i2 = new Intent("android.intent.action.MAIN");
i2.setComponent(ComponentName.unflattenFromString("com.android.chrome/com.android.chrome.Main"));
i2.addCategory("android.intent.category.LAUNCHER");
i2.setData(Uri.parse("https://wwww.google.com"));
System.out.println("hello1");
startActivity(i2);
System.out.println("hello2");
}
}
你试图在html的构造函数上启动一个活动,这是你的问题。你所能做的就是将服务上下文传递给html类。
试试这个:
public html(Context externalContext) {
Intent i2 = new Intent("android.intent.action.MAIN");
i2.setComponent(ComponentName.unflattenFromString("com.android.chrome/com.android.chrome.Main"));
i2.addCategory("android.intent.category.LAUNCHER");
i2.setData(Uri.parse("https://wwww.google.com"));
i2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
System.out.println("hello1");
externalContext.startActivity(i2); --> START WITH EXTERNAL CONTEXT!!!
System.out.println("hello2");
}
…像这样注入通知服务上下文:
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
new Thread(new Runnable() {
public void run(){
Looper.prepare();
int cangethtml = 1;
try{
if(cangethtml==1){
cangethtml = 0; //only runs once
new html(NLService.this); --> !!!! inject CONTEXT !!!!
}
}finally{Looper.loop();}
};
}).start();
}
实际上……你的html根本不需要扩展Activity(实际上对我来说html()应该是你的通知服务的一个方法,而不是一个类)。