Click here to Skip to main content
15,891,136 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi.
I write this code but it cant install.
In manifest file in line <service name="....."> it show a warning "Exported service does not require permission" and when I install the widget it is closing instalation
How can I solve it ?
thanks

Java
import java.util.Calendar;

import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.widget.RemoteViews;

public class WidgetProvider extends AppWidgetProvider{
	
	
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
		super.onUpdate(context, appWidgetManager, appWidgetIds);
	}
	
	@Override
	public void onEnabled(Context context) {
		super.onEnabled(context);
	}
	
	@Override
	public void onDisabled(Context context) {
		super.onDisabled(context);
	}
	
	public final static class UpdateService extends Service
	{

		final static String ACTION_UPDATE = "ir.ashouraiyan.UPDATE";
		
		final static IntentFilter intentFilter;
		Calendar calendar;
		static 
		{
			intentFilter = new IntentFilter();
			intentFilter.addAction(Intent.ACTION_TIME_TICK);
			intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
			intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
		}
		
		@Override
		public IBinder onBind(Intent arg0) {
			return null;
		}
		
		@Override
		public void onCreate() {
			super.onCreate();
			Init();
			registerReceiver(timeChangedReceiver, intentFilter);
		}
		
		@Override
		public void onDestroy() {
			super.onDestroy();
			unregisterReceiver(timeChangedReceiver);
		}
		
		@Override
		public int onStartCommand(Intent intent, int flags, int startId) {
			if(ACTION_UPDATE.equals(intent.getAction()))
				Update();
			return super.onStartCommand(intent, flags, startId);
		}
		void Init()
		{
			calendar = Calendar.getInstance();
		}
		
		void Update()
		{
			calendar.setTimeInMillis(System.currentTimeMillis());
			RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget_layout);
			
			remoteViews.setTextViewText(R.id.textView, ""+calendar.getTimeInMillis());
			
			ComponentName widget = new ComponentName(this, WidgetProvider.class);
			AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
			appWidgetManager.updateAppWidget(widget, remoteViews);
		}
		
		final BroadcastReceiver timeChangedReceiver = new BroadcastReceiver() {
			
			@Override
			public void onReceive(Context context, Intent intent) {
				final String action = intent.getAction();
				if(action.equals(Intent.ACTION_TIMEZONE_CHANGED) ||
				   action.equals(Intent.ACTION_TIME_CHANGED))
					Init();
			
				Update();
			}
			
		};
		
	}
	
}



XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ir.ashouraiyan.moharamdaycounter"
    android:versionCode="1"
    android:versionName="1.0" xmlns:tools="http://schemas.android.com/tools">

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
        <receiver 
            android:name=".WidgetProvider">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
            <meta-data 
                android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
        </receiver>
        
        <service android:name=".WidgetProvider$UpdateService">
            <intent-filter>
                <action android:name="ir.ashouraiyan.UPDATE"/>
            </intent-filter>
        </service>
        
    </application>

</manifest>
Posted
Updated 10-Sep-14 22:13pm
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900