2016-09-23 52 views
0

我有一项服务。在服务中,我会在课堂上调用一个函数。该功能可以打开一个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:尝试调用虚拟方法“无效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

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

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

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

你只需要:

使用getApplication().startActivity()做的工作,getApplication()是一个功能ServiceActivity了,如果你只需要在应用程序方面,而不是一些活动。

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

Service中的代码只需要拨打getApplication().startActivity(XXX.makeIntent())

+0

感谢Gohan。所以,我的班级名称不会从任何班级延伸。这样对吗?只需使用'public class classInten {}' – Jame

+0

你不需要'classInten'。只是一个静态方法startXXXActivity(context)将完成这项工作。 – Gohan

+0

我使用这个类来使我的代码更清晰。因为所有放入一项服务的功能都会使服务中的代码过长。因此,我将调用意图分解为另一个类classIntent() – Jame

相关问题