我有服务。在服务中,我将在课堂上调用一个函数。该功能允许打开Intent 我的服务是
public class service extends Service
{
private static final String TAG = "MyService";
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onDestroy() {
Log.d(TAG, "onDestroy");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
return START_STICKY;
}
}
我的班级是
public class classIntent extends Application{
public void homeIntent()
{
Intent intent1 = new Intent(Intent.ACTION_MAIN);
intent1.addCategory(Intent.CATEGORY_HOME);
intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent1);
}
在服务中,我将按以下步骤调用homeIntent()
函数:
在服务的onCreate()中,我将使用
private classIntent cIntent;
@Override
public void onCreate() {
cIntent=new classIntent();
...}
然后在onStartCommand()
函数中,我使用了
cIntent.homeIntent();
然而,我收到了错误,例如:
引起:java.lang.NullPointerException:尝试调用虚方法' void android.content.Context.startActivity(android.content.Intent)'在空对象引用上
我该如何解决?当我的班级classIntent
从应用程序扩展时,我是否正确?我想在类中使用一些函数,例如:getApplicationContext()
...如果不正确,我需要扩展哪个类?我在后台运行应用程序。谢谢所有
我的清单是
<application android:label="@string/app_name"
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:enabled="true" android:name=".service" />
<activity android:enabled="true" android:name=".classIntent" />
</application>
答案 0 :(得分:1)
你真的不需要这样做,这是非常错误的。
你的类名代码风格不好,应该是ClassName
<activity android:enabled="true" android:name=".classIntent" />
classIntent
不是您代码中的活动。
使用getApplication().startActivity()
来完成工作,getApplication()
是一个函数Service
,Activity
具有,如果您只需要Application上下文,而不是某些活动。
如果你需要清除代码,我建议你可以在你的助手类中放置一个静态makeIntent
函数,或者将这个函数放在与意图关联的类中。
服务中的代码只需要调用getApplication().startActivity(XXX.makeIntent())