java.lang.SecurityException: не разрешается запускать службу Intent - PullRequest
1 голос
/ 29 сентября 2011

Привет всем при установке моего приложения на эмуляторе, я получаю это:

ОШИБКА / AndroidRuntime (465): java.lang.RuntimeException: невозможно запустить получатель com.myPackage.Widget.MYWidget: java.lang.SecurityException: не разрешено запускать службу Intent {cmp = com.myPackage / .Widget. MYWidget $ MyWidgetService} без разрешения android.permission.BIND_REMOTEVIEWS

вот код из моего манифеста

    <!-- Broadcast Receiver that will process AppWidget updates -->
    <receiver android:name=".Widget.MYWidget" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

            <!--Broadcast Receiver that will also process our self created action -->
            <action android:name="com.temp.package.Widget.MYWidget.ACTION_WIDGET_LEFT_RECEIVER" />


            <action android:name="com.temp.package.Widget.MYWidget.ACTION_WIDGET_PROGRESSBAR_RECEIVER" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/mywidget_widget_provider" />

    </receiver>
    <service android:name=".Widget.MYWidget$MyWidgetService"
        android:permission="android.permission.BIND_REMOTEVIEWS"
        android:exported="true"  />
        <uses-permission
    android:name="android.permission.BIND_REMOTEVIEWS"></uses-permission>

это мой код

public class MyWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    Intent svcIntent = new Intent(context, MyWidgetService.class);

    //svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
    context.startService(svcIntent);
}

public static class MyWidgetService extends Service
{
    @Override
    public void onStart(Intent intent, int startId)
    {
        super.onStart(intent, startId);
        // Update the widget
        RemoteViews remoteView = buildRemoteView(this);

        // Push update to homescreen
        pushUpdate(remoteView);

        // No more updates so stop the service and free resources
        stopSelf();
    }

    public RemoteViews buildRemoteView(Context context)
    {
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

        //do stuff


        return remoteViews;
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        int oldOrientation = this.getResources().getConfiguration().orientation;

        if(newConfig.orientation != oldOrientation)
        {
            // Update the widget
            RemoteViews remoteView = buildRemoteView(this);

            // Push update to homescreen
            pushUpdate(remoteView);
        }
    }

    private void pushUpdate(RemoteViews remoteView)
    {
        ComponentName myWidget = new ComponentName(this, MyWidget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(myWidget, remoteView);
    }

    @Override
    public IBinder onBind(Intent arg0)
    {
        // TODO Auto-generated method stub
        return null;
    }
}

Ответы [ 2 ]

6 голосов
/ 30 сентября 2011

Избавиться от:

    android:permission="android.permission.BIND_REMOTEVIEWS"
    android:exported="true"

из вашего <service> элемента, так как здесь они не нужны. Это должно решить вашу проблему.

0 голосов
/ 04 января 2012

это почти работает, я добавляю виджет в вертикальном режиме.когда происходит изменение ориентации (по горизонтали) - я думал, что onConfigurationChanged должен быть вызван, но это не так - мой виджет не работает после

. Для этого вам необходимо указать параметр android: configChanges дляс которым вы хотите справиться.Пожалуйста, не работайте над кодом ICS, вам нужно добавить туда элемент screenSize вместе с другими параметрами, такими как «keyboardHidden | screenSize». Надеюсь, это поможет вам.

Я упоминал об этом только для активности ... Я взялВаш вопрос неправильно.Спасибо за обновление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...