آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

  آپدیت نشدن روزانه و یجت

f-Dehghan  11 سال پیش  10 سال پیش
+1 0

ویجت ذکر روزهای هفته. کل پروژه رو گذاشتم جالب اینجاست
 یه بار کار میکنه تاریخ ها رو که عوض میکنم کار نمیکنه
و یا ساعت 12 شب هم یه بار کار میکنه یه بار نه.........

این فایل widget  توی پوشه xml

 <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget"
android:minHeight="146dip"
android:minWidth="146dip"
android:updatePeriodMillis="86400000"/>

این manifest

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.allbaloo.app.zekreRooz"
android:versionCode="1"
android:versionName="1.0" >

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.SET_TIME" />

<application
android:icon="@drawable/imag1"
android:label="@string/app_name" >
<activity
android:name=".Info"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.INFO" />
</intent-filter>
</activity>

<receiver
android:name="MyWidget"
android:label="@string/lable" >
<intent-filter>
<action android:name="AUTO_UPDATE" />//این کد رو پیدا کردم نمیدونم درسته یا نه؟
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
<intent-filter>
<action android:name="ACTION_AUTO_UPDATE_WIDGET" />//و این خط
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget" />
</receiver>

<service
android:name=".MyService"
android:enabled="true" />
</application>

<uses-sdk android:minSdkVersion="3" />

</manifest>

این AppWidgetProvider

 import java.util.Calendar;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;


public class MyWidget extends AppWidgetProvider {

private PendingIntent service = null;
public AlarmManager m;


@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
final Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.AM_PM, Calendar.AM);
final Intent i = new Intent(context, MyService.class);
if (service == null)
{
service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
}
m.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 86400000, service);
}


@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
}


@Override
public void onDisabled(Context context) {
super.onDisabled(context);
}


@Override
public void onEnabled(Context context) {
super.onEnabled(context);
m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
final Calendar cale = Calendar.getInstance();
cale.set(Calendar.HOUR_OF_DAY, 0);
cale.set(Calendar.MINUTE, 0);
cale.set(Calendar.AM_PM, Calendar.AM);
final Intent i = new Intent(context, MyService.class);
if (service == null)
{
service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
}
m.setRepeating(AlarmManager.RTC_WAKEUP, cale.getTimeInMillis(), 86400000, service);
}


@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
}

}

این هم Service

 import java.util.Calendar;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.widget.RemoteViews;


public class MyService extends Service
{

RemoteViews view;


@Override
public void onCreate()
{
super.onCreate();
}


@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
buildUpdate();

return super.onStartCommand(intent, flags, startId);
}


private void buildUpdate()
{
view = new RemoteViews(getPackageName(), R.layout.widget);

ComponentName thisWidget = new ComponentName(this, MyWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);

Calendar calendar = Calendar.getInstance();
int getrooz = calendar.get(Calendar.DAY_OF_WEEK);
if (getrooz == 1) {
view.setImageViewResource(R.id.imgzekr, R.drawable.imag2);
}
if (getrooz == 2) {
view.setImageViewResource(R.id.imgzekr, R.drawable.imag3);
}
if (getrooz == 3) {
view.setImageViewResource(R.id.imgzekr, R.drawable.imag4);
}
if (getrooz == 4) {
view.setImageViewResource(R.id.imgzekr, R.drawable.imag5);
}
if (getrooz == 5) {
view.setImageViewResource(R.id.imgzekr, R.drawable.imag6);
}
if (getrooz == 6) {
view.setImageViewResource(R.id.imgzekr, R.drawable.imag7);
}
if (getrooz == 7) {
view.setImageViewResource(R.id.imgzekr, R.drawable.imag1);
}
manager.updateAppWidget(thisWidget, view);

}


@Override
public IBinder onBind(Intent intent)
{
return null;
}
}
+1 0
هم تویupdate و هم توی enable آلارم رو ست کردم ولی اجرا نشده (11 سال پیش)
0 0
وقتی درگ میشه توی صفحه درست اجرا میشه ولی آپدیت نمیشه (11 سال پیش)
0 0
حواسم نبود قبل از پاسخ دادن بگم که عنوان سوالتون مناسب نیست، لطفاً تغییرش بدید. (11 سال پیش)
+1 0
من ویجت برای این برنامم لینک همین کار رو کردم یعنی یه کاری کردم که هر ثانیه آپدیت بشه خواستی بگو کد هاشو برات بزارم (11 سال پیش)
0 0
لطف کنین ممنون میشم... (11 سال پیش)
0 0
کد ها رو گذاشتم ولی از آلارم منیجر استفاده نکردم !!!!! (11 سال پیش)
0 0
نصب کردم ولی چرا uninstall نمیشه؟ (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Spirit  11 سال پیش
+2 0

شما PendingIntent رو مقدار دادید ولی به اصطلاح fireـِش نکردید،

 service.send();

البته من از سرویس و AlarmManager استفاده نکردم، مقدار updatePeriodMillis رو گذاشته بودم رو حداقل یعنی نیم ساعت.

میتونید PendingIntent رو روی ImageView هم تنظیم کنید تا با کلیک روی اون ویجت بروز بشه.

0 0
ممنون از لطفتون یعنی نمیشه بدون کلیک روزانه تصویر ویجت عوض بشه؟ (11 سال پیش)
0 0
service.send(); رو دقیقا کجا باید بذارم؟ توی onenable یا onupdate؟ (11 سال پیش)
پاسخ به سوال 
atf  11 سال پیش
+1 0

کلاس ویجت (در این جا وقتی رو ویجت زده میشه به کلاس ActivityMain وارد میشه )

 
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

public class ExampleAppWidgetProvider extends AppWidgetProvider {

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;

        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];

            // Create an Intent to launch ExampleActivity
            Intent intent = new Intent(context, ActivityMain.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            // Get the layout for the App Widget and attach an on-click listener
            // to the button
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
            views.setOnClickPendingIntent(R.id.analogClock1, pendingIntent);

            // Tell the AppWidgetManager to perform an update on the current app widget
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }
}

لی اوت ویجت ( بجای ساعتی که من گذاشتم هر چیزی میتونه باشه )

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <AnalogClock
        android:id="@+id/analogClock1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:dial="@drawable/backclock"
        android:resizeMode="horizontal|vertical" />

</LinearLayout>

xml ویجت ( 144 در 144 اندازه ویجت هست که می تونید تغییر بدید ) این برای یک ویجت 2*2

 <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/example_appwidget"
    android:minHeight="144dp"
    android:minWidth="144dp"
    android:updatePeriodMillis="86400000" >

</appwidget-provider>

این قسمت رو هم در مانیفست در تگ اپلیکیشن اضافه کنید

 <receiver
            android:name="ExampleAppWidgetProvider"
            android:label="clock Widget" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/example_appwidget_info" />
        </receiver>

( تو label اسم ویجت تونه )

 

0 0
مشکل من اینه آلارم رو نمیدونم کجا باید بذارم توی onupdate یا onenable یا onreseve ؟ ممنون از کمکتون (11 سال پیش)
+1 0
من که گفتم از آلارم منیجر استفاده نکردم ولی برای آپدیت شدن ویجت تو اون xml ی که بالا گذاشتم میتونید به جایی تمام روز اون عدد 86400000 هر مقداری که دوست داری بذاری (11 سال پیش)
0 0
ممنونم .سرتونو درد اوردم باید ببخشید اون کار رو کردم ولی 24 ساعت بعد از اینکه ویجت به صفحه کشیده میشه آلارم کار میکنه .من میخوام با عوض شدن روز یعنی نیمه شب این ویجت اپدیت بشه حتی اگر گوشی sleep باشه.باز هم تشکر از وقتی که گذاشتید. (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .