reza_web
پنج شنبه 13 اسفند 1394, 07:18 صبح
سلام
من طبق آموزش اين لينك
http://barnamenevis.org/showthread.php?470763-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-notification-%D8%B3%D8%B1-%D8%B3%D8%A7%D8%B9%D8%AA-%D8%AE%D8%A7%D8%B5&highlight=notification
خواستم آلارم جهت انجام كاري در يك ساعت مشخص انجام بدهم ولي اين پيغام را مي دهد
OnBootReceiver has no zero argument constructor
ميشه كسي كمك كنه؟
reza_web
شنبه 15 اسفند 1394, 04:44 صبح
من يك فايل جاوا بنام MyNotification   ساختم و اين كدها را داخلش گذشتم
public class MyNotification extends BroadcastReceiver {
    PendingIntent pi;
    Intent intent;
    NotificationManager notificationManager;
    Notification notification;
    @Override
    public void onReceive(Context context, Intent intent) {
        context.startService(new Intent(context, MyService.class));
        Log.d("AlarmController", "StartAlarm");
    }
    public class MyService extends Service {
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.d("AlarmController", "StartAlarm");
            
            notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            intent = new Intent(this,MyNotification.class);
            pi = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, 0);
            notification = new Notification.Builder(this)
                    .setContentTitle("عنوان")
                    .setContentText("متن اعلان")
                    .setSmallIcon(R.drawable.icon)
                    .setContentIntent(pi)
                    .setOngoing(true)
                    .build();
            notificationManager.notify(0,notification);
            
             return Service.START_FLAG_REDELIVERY;
            //return START_STICKY;
        }
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
    public  class AlarmController {
        private Context m_Context;
        private AlarmManager mgr;
        private static final long PERIOD = 6000*60 ;
        public AlarmController(Context context){
            m_Context = context;
            mgr = (AlarmManager)m_Context.getSystemService(Context.A LARM_SERVICE);
            Log.d("AlarmController", "StartAlarm");
        }
        public void StartAlarm(){
            StopAlarm();
            Intent i = new Intent(m_Context, MyNotification.class);
            PendingIntent pi=PendingIntent.getBroadcast(m_Context, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);
            mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAK EUP, SystemClock.elapsedRealtime(),PERIOD,pi);
            Log.d("AlarmController", "StartAlarm");
        }
        public void StopAlarm(){
            Intent i = new Intent(m_Context, MyNotification.class);
            PendingIntent pi=PendingIntent.getBroadcast(m_Context, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);
            mgr.cancel(pi);
            Log.d("AlarmController", "StopAlarm");
        }
    }
    public  class OnBootReceiver extends BroadcastReceiver {
        @Override
        public  void onReceive(Context context, Intent intent) {
            AlarmController alarm = new AlarmController(context);
            alarm.StartAlarm();
        }
    }
}
در مانيفست برنامه هم اينها را نوشتم
 <receiver android:name=".MyNotification" ></receiver>
        <receiver
            android:name=".MyNotification$OnBootReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <service android:name=".MyNotification$MyService" >
        </service>
اما وقتي موقع اجراي آلارم ميشه اين خطا را ميدهد:
MyNotification$MyService has no zero argument constructor
خيلي هم گشتم ولي چيزي پيدا نكردم
#root#
شنبه 15 اسفند 1394, 04:54 صبح
خيلي هم گشتم ولي چيزي پيدا نكردم
اگر میشه بگید چجوری گشتید.
ترجمش هم میگه ایراد چیه و چجوری باید رفع کرد.
کلاس MyService متد سازنده ای (constructor) که هیچ ورودی (argument) رو نپذیره  نداره، پس یعنی باید یدونه ایجاد کنید.
reza_web
شنبه 15 اسفند 1394, 05:52 صبح
من هم در كلاس Myservice  و هم OnBootReceiver اين دو متد را اضافه كردم
public MyService() {
        }
و 
 public OnBootReceiver(){
        }
 
 نوع همه كلاسها را Static  قرار دادم و مشكل حل شد
ممنون از شما
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.