1

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

2 Answers 2

6

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.

Sign up to request clarification or add additional context in comments.

1 Comment

@Elad Gelman: I have no idea what you are talking about, and it does not seem related to this question. Please consider starting a new question and explaining a bit more.
0

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.

1 Comment

I think you are wrong, on configchanges is called only on activities, and this is a service running. there is a problem with Android Widgets- every time configChanges is called from the main screen the whole UI elements are being destroyed and rebuilt ( Widgets as well) there has to be a better why to bind them properly.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.