У меня есть SplashScreen с 3-мя Intent-фильтрами, определенными в Manifest следующим образом -
<activity
android:name=".SplashScreen"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme"
android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="kljb"
android:scheme="http" />
<data
android:host="kljb"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data
android:host="xyz"
android:scheme="abc" />
</intent-filter>
</activity>
Я хочу отключить этот -
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data
android:host="xyz"
android:scheme="abc" />
</intent-filter>
ИПосле некоторого действия пользователя я хочу включить его.
Я пытался использовать -
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName compName =
new ComponentName(getPackageName(), ".SplashScreen");
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Я не знаю точно, где написать этот код выше. Я установил этот код при создании SplashScreen, но получил ошибку -
Невозможно запустить действие ComponentInfo java.lang.SecurityException: попытка изменить состояние компонента;
Я знаю, что этот вопрос несколько раз задавался на SO, но ни один из них не касается того, где написать этот код.
После предложения Commonsware:
Я сделал псевдоним -
<activity-alias
android:name=".SplashScreen"
android:screenOrientation="portrait"
android:targetActivity=".SplashScreen"
android:theme="@style/SplashTheme"
android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data
android:host="xyz"
android:scheme="abc" />
</intent-filter>
</activity-alias>
Итак, я вызываю код в oncreate () MainActivity, который открывается после SplashScreen -
2019-10-06 04: 49: 52.578 23014-23014 / com. khaalijeb.inkdrops.debug E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.khaalijeb.inkdrops.debug, PID: 23014 java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {com.khaalijeb.inkdrops.debug / com.kha. inkdrops.MainActivity}: java.lang.SecurityException: попытка изменить состояние компонента;pid = 23014, uid = 10262, component = com.khaalijeb.inkdrops / .SplashScreen на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3270) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3409) в и.app. android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2016) в android.os.Handler.dispatchMessage (Handler.java:107) в android.os.Looper.loop (Looper.java:214) в android.app.ActivityThread.main (ActivityThread.java:7356) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:492) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:930) Причина: java.lang.SecurityException: Попытка изменить компонент государство;pid = 23014, uid = 10262, component = com.khaalijeb.inkdrops / .SplashScreen на android.os.Parcel.createException (Parcel.java:2071) на android.os.Parcel.readException (Parcel.java:2039) на андроиде.os. com.khaalijeb.inkdrops.MainActivity.onCreate (MainActivity.java:1604) на android.app.Activity.performCreate (Activity.java:7802) на android.app.Activity.performCreate (Activity.java:7791) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1306) при android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3245) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3409) в android.app.servertransaction.LaunchActivityItem. выполнить (LaunchActivityItem.java:83) в android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135) в android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2016) в android.os.Handler. dispatchMessage (Handler.java:107) на android.os.Looper.loop (Looper.java:214) на android.app.ActivityThread.main (ActivityThread.java:7356)на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:492) на com.android.internal.os.ZygoteInit.main (ZygoteInit. java: 930) Причина: android.os.RemoteException: трассировка удаленного стека: в com.android.server.pm.PackageManagerService.setEnabledSetting (PackageManagerService.java:21250) в com.android.server.pm.PackageManagerService.setD.java: 21184) на android.content.pm.IPackageManager $ Stub.onTransact (IPackageManager.java:3473) на com.android.server.pm.PackageManagerService.onTransact (PackageManagerService.java:4015) на android.os.Binder. execTransactInternal (Binder.java:1021)
Это та же ошибка, что и я.