Pregunta

Regresé al desarrollo del widgets después de actualizar al último SDK y, de repente, mi widget está fallando en el inicio con este mensaje:

ERROR/AndroidRuntime(5296): java.lang.RuntimeException: 
Unable to start receiver topjob.widget.SearchWidget: 
java.lang.SecurityException: Permission Denial: 
attempt to change component state from pid=5296, uid=10057, package uid=10048

Aquí hay dos líneas de código donde ocurre la excepción:

@Override
public void onEnabled(Context context) {
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(new ComponentName("topjob",
            ".widget.SearchWidgetBroadcastReceiver"), 
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
    startAlarm(context, UPDATE_RATE_SEC);
}

Entonces en el código anterior startAlarm() nunca se ejecuta desde pm.setComponentEnabledSetting() Lanza la Ejecución de Seguridad

¿Me falta alguna configuración de seguridad en mi manifiesto? Actualmente tengo:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Estoy desarrollando para SDK v. 1.5 y solía funcionar bien

Ps sucede en el teléfono y el emulador

¿Fue útil?

Solución 3

Ok, esto no es realmente una respuesta, sino más bien una solución. Si alguien quiere intervenir y proporcionar respuesta o explicaciones sobre cómo se debe hacer esto, con mucho gusto lo aceptaría. De todos modos, lo conseguí funcionando cambiando newState bandera de COMPONENT_ENABLED_STATE_ENABLED a PackageManager.COMPONENT_ENABLED_STATE_DEFAULT. Dado que mi receptor de transmisión ha habilitado el estado en el manifiesto, funciona bien

Otros consejos

En el manifest.xml agregarás

<permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
android:sharedUserId="android.uid.system"

En el android.mk agregará

LOCAL_CERTIFICATE := platform  

esto es todo.

¿Puedes intentar agregar este permiso en tu manifiesto?

<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>

Solo recibí este error "java.lang.securityException: denegación de permiso:" Cuando trato de deshabilitar algún componente del paquete en el que se está ejecutando. De lo contrario, obtuve éxito.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top