如何从服务中的类调用Intent

时间:2016-09-23 10:59:22

标签: android android-intent android-service

我有服务。在服务中,我将在课堂上调用一个函数。该功能允许打开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>

1 个答案:

答案 0 :(得分:1)

你真的不需要这样做,这是非常错误的。

你的类名代码风格不好,应该是ClassName

<activity android:enabled="true" android:name=".classIntent" /> classIntent不是您代码中的活动。

你只需要:

使用getApplication().startActivity()来完成工作,getApplication()是一个函数ServiceActivity具有,如果您只需要Application上下文,而不是某些活动。

如果你需要清除代码,我建议你可以在你的助手类中放置一个静态makeIntent函数,或者将这个函数放在与意图关联的类中。

服务中的代码只需要调用getApplication().startActivity(XXX.makeIntent())