Android创建服务应用程序
我的场景是:我有两个应用程序Main和WSCallerAndroid创建服务应用程序,android,Android,我的场景是:我有两个应用程序Main和WSCaller Main是一个应用程序,它调用WSCaller执行一些WS-call并等待结果 WSCaller是一个不需要任何活动、屏幕或启动器图标的应用程序。它就像一个在后台运行并将数据返回主应用程序的服务应用程序 我可以创建这样一个WSCaller应用程序吗 我试图创建一个简单的,如下所示 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest x
- Main是一个应用程序,它调用WSCaller执行一些WS-call并等待结果
- WSCaller是一个不需要任何活动、屏幕或启动器图标的应用程序。它就像一个在后台运行并将数据返回主应用程序的服务应用程序
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ch.tpg.syscontrolws.mobile">
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<receiver android:name=".activities.ServiceStarter">
<intent-filter>
<action android:name="mypackage.CALL_WS" />
</intent-filter>
</receiver>
</application>
</manifest>
大体上,我做到了:
Intent intent = new Intent("mypackage.CALL_WS");
sendBroadcast(intent);
但是WSCaller没有启动并接收消息
我怎样才能让它工作
谢谢。所有Android应用程序都需要启动活动。所以你需要有某种占位符用户界面。您还需要在清单中声明服务 像这样:
<service android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:isolatedProcess=["true" | "false"]
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
. . .
. . .
来源:我认为问题在于,它是一个独立的应用程序。这就是为什么它遵循自己的配置 在Android 3.1及更高版本上,用户必须在任何清单注册的BroadcastReceiver工作之前启动您的一项活动。 另一种启动方式是
private void launchComponent(String packageName, String name)
{
Intent launch_intent = new Intent("android.intent.action.MAIN");
launch_intent.addCategory("android.intent.category.LAUNCHER");
launch_intent.setComponent(new ComponentName(packageName, name));
launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startService(launch_intent);
}
public void startApplication(String application_name)
{
try{
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
// intent.setAction(Intent.)
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
List<ResolveInfo> resolveinfo_list = this.getPackageManager().queryIntentActivities(intent, 0);
for(ResolveInfo info:resolveinfo_list)
{
if(info.activityInfo.packageName.equalsIgnoreCase(application_name))
{
launchComponent(info.activityInfo.packageName, info.activityInfo.name);
break;
}
else{
}
}
}
catch (ActivityNotFoundException e) {
Toast.makeText(this.getApplicationContext(), "There was a problem loading the application: "+application_name,Toast.LENGTH_SHORT).show();
}
}
private void launchComponent(字符串packageName,字符串名称)
{
Intent-launch_-Intent=newintent(“android.Intent.action.MAIN”);
launch_intent.addCategory(“android.intent.category.LAUNCHER”);
启动_intent.setComponent(新组件名(packageName,name));
启动\u intent.setFlags(intent.FLAG\u活动\u新任务);
这是启动服务(启动意图);
}
public void startApplication(字符串应用程序名称)
{
试一试{
Intent-Intent=newintent(“android.Intent.action.MAIN”);
addCategory(“android.intent.category.LAUNCHER”);
//intent.setAction(intent.)
intent.addFlags(intent.FLAG\u活动\u无\u动画);
List resolveinfo_List=this.getPackageManager().queryInputActivities(intent,0);
对于(ResolveInfo:ResolveInfo_列表)
{
if(info.activityInfo.packageName.equalsIgnoreCase(应用程序名称))
{
启动组件(info.activityInfo.packageName、info.activityInfo.name);
打破
}
否则{
}
}
}
捕获(ActivityNotFounde异常){
Toast.makeText(this.getApplicationContext(),“加载应用程序时出现问题:“+application\u name,Toast.LENGTH\u SHORT).show();
}
}
启动程序应用程序需要活动。您可以使您的活动透明化。您无法将服务创建为应用程序。是的,但是你可以做一件事
您可以从活动中创建另一个流程,并在另一个流程中启动服务
要在单独的进程中创建服务,需要在manifest.xml中添加:process
属性
这就是您可以在不同进程中调用服务的方式,不同的进程不会共享非静态和静态动态内存。那么,您可以添加一些代码来说明WSCaller如何将数据返回到Main吗?非常感谢。也许您想在服务类中使用OnBind函数。看见您可以使用绑定器与绑定服务的活动进行通信。谢谢您,RockerNAP,这就是我要寻找的:删除清单文件中的所有活动配置,只保留服务。
private void launchComponent(String packageName, String name)
{
Intent launch_intent = new Intent("android.intent.action.MAIN");
launch_intent.addCategory("android.intent.category.LAUNCHER");
launch_intent.setComponent(new ComponentName(packageName, name));
launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startService(launch_intent);
}
public void startApplication(String application_name)
{
try{
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
// intent.setAction(Intent.)
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
List<ResolveInfo> resolveinfo_list = this.getPackageManager().queryIntentActivities(intent, 0);
for(ResolveInfo info:resolveinfo_list)
{
if(info.activityInfo.packageName.equalsIgnoreCase(application_name))
{
launchComponent(info.activityInfo.packageName, info.activityInfo.name);
break;
}
else{
}
}
}
catch (ActivityNotFoundException e) {
Toast.makeText(this.getApplicationContext(), "There was a problem loading the application: "+application_name,Toast.LENGTH_SHORT).show();
}
}