Я бы хотел отключить android.nfc.action.TECH_DISCOVERED
IntentFilter в зависимости от выбора настроек пользователя, чтобы избежать появления диалогового окна выбора приложения.
Для этого я создал псевдоним активности вмой файл манифеста Android и измените его состояние через PackageManager:
Anroid Manifest File
<activity
android:name=".activities.ActivitySplash"
android:configChanges="orientation"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity-alias
android:name=".AliasActivitySplash"
android:targetActivity=".activities.ActivitySplash"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/techlist"/>
</activity-alias>
Activity Alias State Management:
public void enableAlias() {
int newState = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
_packageManager.setComponentEnabledSetting(new ComponentName(_packageName, _packageName + "." +
"AliasActivitySplash"), newState, PackageManager.DONT_KILL_APP);
}
public void disableAlias() {
int newState = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
_packageManager.setComponentEnabledSetting(new ComponentName(_packageName, _packageName + "." +
"AliasActivitySplash"), newState, PackageManager.DONT_KILL_APP);
}
Я получаю java.lang.SecurityException
каждый раз, когда пытаюсьизменить состояние псевдонима. Я прочитал, что установка приложения как системного приложения должна решить эту проблему.
Обнаружено исключение:
java.lang.SecurityException: Attempt to change component state; pid=10766, uid=10329, component=packagename/packagename.AliasActivitySplash
at android.os.Parcel.createException(Parcel.java:2071)
at android.os.Parcel.readException(Parcel.java:2039)
at android.os.Parcel.readException(Parcel.java:1987)
at android.content.pm.IPackageManager$Stub$Proxy.setComponentEnabledSetting(IPackageManager.java:7336)
at android.app.ApplicationPackageManager.setComponentEnabledSetting(ApplicationPackageManager.java:2554)
at packagename.activities.alias.ActivitySplashAliasManager.disableAlias(ActivitySplashAliasManager.java:27)
at packagename.fragments.FragmentPreferences.onPreferenceChange(FragmentPreferences.java:83)
at androidx.preference.Preference.callChangeListener(Preference.java:1118)
at androidx.preference.TwoStatePreference.onClick(TwoStatePreference.java:67)
at androidx.preference.Preference.performClick(Preference.java:1182)
at androidx.preference.Preference.performClick(Preference.java:1166)
at androidx.preference.SwitchPreferenceCompat.performClick(SwitchPreferenceCompat.java:193)
at androidx.preference.Preference$1.onClick(Preference.java:181)
at android.view.View.performClick(View.java:7140)
at android.view.View.performClickInternal(View.java:7117)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27351)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
2019-10-24 09:21:43.863 10766-10766/packagename E/Test: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.pm.PackageManagerService.setEnabledSetting(PackageManagerService.java:21250)
at com.android.server.pm.PackageManagerService.setComponentEnabledSetting(PackageManagerService.java:21184)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:3473)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4015)
at android.os.Binder.execTransactInternal(Binder.java:1021)
Я что-то не так делаю или есть другой способ сделать это?