java.lang.SecurityException: Not allowed to start service Intent

為{幸葍}努か 提交于 2019-12-11 05:25:25

问题


hey all when installing my app to the emulator I get this:

ERROR/AndroidRuntime(465): java.lang.RuntimeException: Unable to start receiver com.myPackage.Widget.MYWidget: java.lang.SecurityException: Not allowed to start service Intent { cmp=com.myPackage/.Widget.MYWidget$MyWidgetService } without permission android.permission.BIND_REMOTEVIEWS

here is the code from my manifest

    <!-- 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>

this is my code

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;
    }
}

回答1:


Get rid of:

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

from your <service> element, as neither are needed here. This should clear up your problem.




回答2:


it's almost working, I'm in vertical mode when I add the Widget. when on orientation change happens(To Horizontal) - I thought that onConfigurationChanged should be called but it is not- thus my widget is not working after

For this you need to mention the android:configChanges parameter for which you want to handle your on. Please not if you working on ICS code you need to put 'screenSize' element also there with other parameters like 'keyboardHidden|screenSize' Hope this will help you.

I mentioned this for activity only...I took your question wrongly. Thanks for update.



来源:https://stackoverflow.com/questions/7602490/java-lang-securityexception-not-allowed-to-start-service-intent

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!