启动别的app的服务(启动其他app)
本文目录一览:
如何让应用程序以服务形式启动
服务运行于后台启动别的app的服务的应用程序启动别的app的服务,它旨在为系统用户提供相应的功能。
1.在“开始→运行”中键入“regedit.exe”,打开“注册表编辑器”,展开分支“HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services”,在右侧窗格中显示的就是本机安装的服务项。
2.如果要新建服务,只须点击“编辑→新建→项”,然后为此项命名,如“test”;然后右击该项,选择“新建→字符串值”或“新建→dword值”即可。添加一个服务项目具体需要添加的键值如下启动别的app的服务:
“DisplayName”,字符串值,对应服务名称;
“Description”,字符串值,对应服务描述;
“ImagePath”,字符串值,对应该服务程序所在的路径;
“ObjectName”,字符串值,值为“Localsystem”,表示本地登录;
“ErrorControl”,dword值,值为“1”;
“Start”,dword值,值为2表示自动运行,值为3表示手动运行,值为4表示禁止;
“Type”,dword值,应用程序对应10,其它对应20。
3.还要在“test”项下新建一个“Enum”项。按照以上步骤添加qq程序为服务,重新启动计算机后,打开“服务”窗口,就可以看到刚才添加的qq服务。
4.如果要删除某项服务,只要删除注册表的中相关键值即可,本例中要删除qq服务,直接删除“HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\test”分支即可。
如何实现跨应用启动Service
跨应用启动Service需要注意的地方有2点:
1.目标service需要声明exported=true 的属性,表示允许其他应用访问该服务.
2.android5.0之前是可以通过设置隐式意图来跨应用打开Service的,5.0之后就必须要通过显示意图来开启Service.
如何创建跨应用的显示意图呢?
通过Intent的setComponent方法,可以传递一个ComponentName对象,该对象有一个接受2个参数的构造方法,第一参数传递目标Service所在的包名,第二个参数传递目标Service的完整类名.
Demo的结构:
本Demo是通过app2工程的App2Activity打开app工程的AppService服务.同时实现跨应用传递数据的功能
AppService代码:
[java] view plain copy
public class AppService extends Service {
public AppService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.i("AppService", "onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (null != intent) {
Log.i("AppService", "onStartCommand接收到的数据是:" + intent.getStringExtra("data"));
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("AppService", "onDestroy");
}
}
清单文件配置:
[html] view plain copy
?xml version="1.0" encoding="utf-8"?
manifest xmlns:android=""
package="com.example.mchenys.aidlservicedemo"
application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
activity android:name=".MainActivity"
intent-filter
action android:name="android.intent.action.MAIN" /
category android:name="android.intent.category.LAUNCHER" /
/intent-filter
/activity
service
android:name=".AppService"
android:enabled="true"
android:exported="true" /
/application
/manifest
App2Activity代码:
[java] view plain copy
public class App2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app2);
//注意:android 5.0之前是可以通过隐式意图打开其他app的服务的,5.0之后只能通过显式意图来打开.
final Intent intent = new Intent();
//ComponentName的参数1:目标app的包名,参数2:目标app的Service完整类名
intent.setComponent(new ComponentName("com.example.mchenys.aidlservicedemo", "com.example.mchenys.aidlservicedemo.AppService"));
//打开目标AppService
findViewById(R.id.id_btn_start).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//设置要传送的数据
intent.putExtra("data", "Hello AppService,I am App2Activity");
startService(intent);
}
});
//关闭目标AppService
findViewById(R.id.id_btn_stop).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(intent);
}
});
}
}
布局文件的效果就是2个Button,分别用于开启目标服务和关闭目标服务
如何启用APP服务
方法如下:
1、开始〉设置〉控制面板〉管理工具〉服务〉
2、找到Application Layer Gateway Service右击〉属性〉启动类型〉自动
3、找到Application Management右击〉属性〉启动类型〉自动
4、完成,重启计算机
如何一个app开启另一个app
开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
怎么解决app关联启动问题
若是vivo手机,可以按照以下方法进行操作:
1、Funtouch OS 3.0及以上系统关闭关联启动
进入设置--更多设置--权限管理--权限--自启动--关联启动,可将软件后的开关关闭,则该软件不会被其他软件带起。
2、Funtouch OS 3.0以下系统关闭关联启动
进入i管家--软件管理--自启动管理--关联启动界面,可将软件后的开关关闭,则该软件不会被其他软件带起。