如何从主活动外部运行startActivity

时间:2014-03-21 11:53:03

标签: java android start-activity

我有一个MainActivity类,其中NotificationsListener(单独的类)。当出现通知时,它会调用我的gethtml课程。它们都扩展Activity,但我startActivity类中的gethtml不起作用...(如果我在我的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()  {
    try {
                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"));
                startActivity(i2);

    }   finally{}
}
}

2 个答案:

答案 0 :(得分:0)

您需要活动的上下文。 startActivity将在Activity

的上下文中调用

答案 1 :(得分:0)

参考开发者论坛:

你应该写

Context.startActivity(i2);

而不是

startActivity(i2);

另外,请确保您不要忘记在您的软件包中<activity>发出相应的AndroidManifest.xml声明。

例如: 在AndroidManifest.xml中查看您定义的所有课程。你有:

<activity android:name="packageName.className"/>

如果html中没有定义AndroidManifest.xml类,则无法访问其中定义的方法和布局。