Я пытаюсь запустить службу (RUN_SYN C) из моего android приложения, служба принадлежит другому приложению, уже установленному на моем 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>
Это декларация сервиса и декларация разрешений в AndroidManifest. xml приложения (ODK-X Services), которое изначально объявляло сервис (пакет - «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, существуют ли разрешения, которые я пытаюсь использовать, на моем android устройстве - они есть. Мне не разрешено редактировать код второго приложения, но это не имеет значения, поскольку оно экспортирует службу (для экспорта установлено значение true). Я прочитал много сообщений, но ни одно из предложений (копирование всех разрешений второго приложения, упорядочивание разрешений для зависимостей и проверка поддерживаемого SDK, который в моем случае составляет 16, а не 23) не помогло. Мне действительно поможет, если кто-нибудь сможет просмотреть это и указать, в чем я ошибаюсь. Спасибо!