我正在尝试从我的android应用程序运行服务(RUN_SYNC),该服务属于我的android设备上已经安装的另一个应用程序,我目前仅在使用前测试该服务。我也在清单中添加了相关权限。
这是我的应用程序代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button syncButton = findViewById(R.id.button_id);
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(
"org.opendatakit.services",
"org.opendatakit.services.sync.service.OdkSyncService"));
startService(intent);
}
});
}
}
这是我的应用程序的AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="org.opendatakit.webkitserver.RUN_WEBSERVER" />
<uses-permission android:name="org.opendatakit.database.RUN_DATABASE" />
<uses-permission android:name="org.opendatakit.sync.RUN_SYNC" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
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>
</application>
</manifest>
这是最初声明服务的应用程序(ODK-X服务)的AndroidManifest.xml中的服务声明和权限声明(程序包为“ org.opendatakit.services“>):
<service android:name=".sync.service.OdkSyncService"
android:exported="true"
android:process=":sync"
android:permission="org.opendatakit.sync.RUN_SYNC" >
</service>
<permission android:name="org.opendatakit.sync.RUN_SYNC"
android:label="@string/sync_launch_permission"
android:permissionGroup="org.opendatakit.services.permissions"
android:protectionLevel="signature">
</permission>
这是错误:
Process: com.example.myapplication, PID: 1423
java.lang.SecurityException: Not allowed to start service Intent { cmp=org.opendatakit.services/.sync.service.OdkSyncService } without permission org.opendatakit.sync.RUN_SYNC
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1381)
at android.app.ContextImpl.startService(ContextImpl.java:1358)
at android.content.ContextWrapper.startService(ContextWrapper.java:613)
at com.example.myapplication.MainActivity$1.onClick(MainActivity.java:24)
at android.view.View.performClick(View.java:5648)
at android.view.View$PerformClick.run(View.java:22442)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
我使用adb shell命令检查了我要使用的权限是否存在于我的android设备中-它们确实存在。我不允许编辑第二个应用程序的代码,但这无关紧要,因为它可以导出服务(export设置为true)。我读了很多帖子,但没有任何建议(复制第二个应用程序的所有权限,对依赖项排序权限并检查受支持的sdk(在我的情况下为16,而不是23))没有帮助。如果有人可以仔细查看并指出我要去哪里,那将对我有很大帮助。谢谢!