اذهب إلى المحتوى

E.Nourddine

الأعضاء
  • المساهمات

    1458
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    18

كل منشورات العضو E.Nourddine

  1. هناك عدة دروس في هذا المجال، منها المجاني -قليل نوعا ما- والمدفوع منها -محتوى جيد-منها: الموقع الرسمي: unity3d.com/learn دروس Udemy. How to Learn Unity
  2. يمكنك فعل ذلك عن طريق استعمال حلقة التكرار مرتين، حيث الحلقة الأولى(i) مسؤولة عن الأعمدة، بينما الثانية (j)مسؤولة عن الصفوف، بالشكل التالي: public class Program { public static void main(String[] args) { // Create 2-dimensional array. int[][] values = new int[4][4]; // Assign three elements in it. values[0][0] = 1; values[1][1] = 2; values[3][2] = 3; // Loop over top-level arrays. for (int i = 0; i < values.length; i++) { // Loop and display sub-arrays. int[] sub = values[i]; for (int x = 0; x < sub.length; x++) { System.out.print(sub[x] + " "); } System.out.println(); } } } سيكون الناتج: المصدر:print 2d-java
  3. باعتبار أن لديك مصفوفة تضم لائحة الأرقام ، سنقوم بتفحص المصفوفة عبر دالة for وبالتالي عند المرور بكل رقم، سيتم إرسال رسالةsms غلى الشخص المعني بالرقم المسجل داخل المصفوقة - السطر ذو الترتيب i- بالطريقة التالية: protected void sendMsg(Context context, SmsMessage smsMessage) { SmsManager smsMgr = SmsManager.getDefault(); ArrayList<string> smsMessageText = smsMgr.divideMessage(smsMessage.getMsgBody()); PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent("SMS_SENT"), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, new Intent("SMS_DELIVERED"), 0); int AddresseesPerMessage = 10; StringBuilder builder = new StringBuilder(); String delim = ""; for (ContactItem c:smsMessage.getAddresseeList()) { // For every phone number in our list builder.append(delim).append(c.getPhoneNumber().toString()); delim=";"; if (((smsMessage.getAddresseeList().indexOf(c)+1) % AddresseesPerMessage) == 0 || smsMessage.getAddresseeList().indexOf(c)+1 == smsMessage.getAddresseeList().size()) { // using +1 because index 0 mod 9 == 0 for(String text : smsMessageText){ // Send 160 bytes of the total message until all parts are sent smsMgr.sendTextMessage(builder.toString(), null, text, sentPI, deliveredPI); } builder.setLength(0); delim=""; } } } أيضا يمكنك إنشاء class مخصصة لإرسال رسائل لمجموعة من الأرقام: private void MultipleSMS(String phoneNumber, String message) { String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent( SENT), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0); // ---when the SMS has been sent--- registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: ContentValues values = new ContentValues(); for (int i = 0; i < MobNumber.size() - 1; i++) { values.put("address", MobNumber.get(i).toString()); // txtPhoneNo.getText().toString()); values.put("body", MessageText.getText().toString()); } getContentResolver().insert( Uri.parse("content://sms/sent"), values); Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(SENT)); // ---when the SMS has been delivered--- registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "SMS delivered", Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); } استعمال كلاس MultipleSMS داخل حلقة تكرار for التي تتصفح الأرقام الموجودة داخل المصفوفة: for (int i = 0; i < MobNumber.size(); i++) { String message = MessageText.getText().toString(); String tempMobileNumber = MobNumber.get(i).toString(); MultipleSMS(tempMobileNumber, message); } المصدر: sending-sms-to-multiple
  4. يمكنك الاستفادة من مجموعة الدروس التالية، مع الأسف لا تتوفر دروس بالعربية حاليا، لكن لا بأس بالانجليزية : موقع appinventor.org يقدم مجموعة دروس متسلسلة ومفيدة. ثم: درس آخر -فرنسي اللغة-:
  5. لفعل ذلك قم بالخطوات التالية: على برنامج Eclipse أنشيء تطبيق. أنشيءLayout يتوفر على <WebView>. أُنقل كود Html إلى ملف assets/ قم بعمل Load لملف file:///android_asset/ file وتكون قد حصلت على تطبيق اندرويد. ويمكنك أيضا الاستعانة بـ Adobe PhoneGap
  6. لحل المشكل المُقابل، جرب إحدى الطريقتين: الطريقة الأولى: اذهب إلى configuration حدد Settings حدد HTTP Proxy عيّن to use no proxy أعد تشغيل Andriod studio الطريقة الثانية:
  7. سأقدم هنا مثال عمل لربط التطبيق بـ Webservice عن طريقبروتوكول SOAP: Layout XML: <?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="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center" android:text="Celsius to Farenheit" android:textSize="30dp" /> <EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:numeric="integer" android:singleLine="true" /> <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center" android:text="Convert to Farenheit" /> <TextView android:id="@+id/tv_result" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="" android:textSize="26dp"/> </LinearLayout> التصميم سيكون كالآتي: أنشيء objects في WebserviceActivity: private final String NAMESPACE = "http://www.w3schools.com/webservices/"; private final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; private final String SOAP_ACTION = "http://www.w3schools.com/webservices/CelsiusToFahrenheit"; private final String METHOD_NAME = "CelsiusToFahrenheit"; private String TAG = "PGGURU"; private static String celcius; private static String fahren; Button b; TextView tv; EditText et; وظيفة onCreate(): public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //Celcius Edit Control et = (EditText) findViewById(R.id.editText1); //Fahrenheit Text control tv = (TextView) findViewById(R.id.tv_result); //Button to trigger web service invocation b = (Button) findViewById(R.id.button1); //Button Click Listener b.setOnClickListener(new OnClickListener() { public void onClick(View v) { //Check if Celcius text control is not empty if (et.getText().length() != 0 && et.getText().toString() != "") { //Get the text control value celcius = et.getText().toString(); //Create instance for AsyncCallWS AsyncCallWS task = new AsyncCallWS(); //Call execute task.execute(); //If text control is empty } else { tv.setText("Please enter Celcius"); } } }); } Class AsyncCallWS: private class AsyncCallWS extends AsyncTask<String, Void, Void> { @Override protected Void doInBackground(String... params) { Log.i(TAG, "doInBackground"); getFahrenheit(celcius); return null; } @Override protected void onPostExecute(Void result) { Log.i(TAG, "onPostExecute"); tv.setText(fahren + "° F"); } @Override protected void onPreExecute() { Log.i(TAG, "onPreExecute"); tv.setText("Calculating..."); } @Override protected void onProgressUpdate(Void... values) { Log.i(TAG, "onProgressUpdate"); } } getFahrenheit(): public void getFahrenheit(String celsius) { //Create request SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); //Property which holds input parameters PropertyInfo celsiusPI = new PropertyInfo(); //Set Name celsiusPI.setName("Celsius"); //Set Value celsiusPI.setValue(celsius); //Set dataType celsiusPI.setType(double.class); //Add the property to request object request.addProperty(celsiusPI); //Create envelope SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.dotNet = true; //Set output SOAP object envelope.setOutputSoapObject(request); //Create HTTP call object HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); try { //Invole web service androidHttpTransport.call(SOAP_ACTION, envelope); //Get the response SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); //Assign it to fahren static variable fahren = response.toString(); } catch (Exception e) { e.printStackTrace(); } } Internet permission: <uses-permission android:name="android.permission.INTERNET" /> لعمل webService مع Json:
  8. على اندرويد يمكن إنشاء RecycleView بمثابة LisView، لذا ما عليك إلا ربطها بـأداة ListView، وكمثال على ذلك: mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); أو: mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));* في هذا الرابط ستجد مقارنة بين RecycleView وَ ListeView بشكل أوضح. الجزء الثاني: الموقع الرسمي: RecyclerView
  9. برنامج ansroid studio في إصداره الثاني -2-، يدعم RTL لكن هذه الخاصية غير مفعلة بشكل افتراضي، ولتفعيلها: على حاسوبك، اذهب إلى المسار : [android-studio2.0]/bins/idea.properties ثم أضف السطر editor.new.rendering=true في آخر idea.properties أعد تشغيل برنامج android studio.
  10. يعتمد ارسال الإشعارات من جهاز لآخر على خدمة secrver-cleint حيث يكون جهازك هو client ويستقبل باقي الإشعارات من الجهاز الآخر. إذا كان هذا ما تصبو إليه، إليك هذا الرابط. هذه الصورة توضح كيفية العمل: ثم هذا المقطع:
  11. لتخزين القيم، سنستعملSharepreferece ، وهي وسيلة تمكننا من تخزين قيم بمفاتيح، حيث لا يتم اضاعة هذه القيم ويمكننا استخدامها يعد غلق وفتح التطبيق مرة أخرى، مثال : SharedPreferences sp = getSharedPreferences("key", 0); SharedPreferences.Editor sedt = sp.edit(); sedt.putString("textvalue", txtEvent.getText().toString()); sedt.putString("txtopertaive", txtOperative.getText().toString()); sedt.commit(); لجلب البيانات المخزنة آنفاً: SharedPreferences sp = getSharedPreferences("key", 0); String tValue = sp.getString("textvalue",""); String tOperative = sp.getString("txtopertaive",""); لتغيير لون textview مثلا، سنستخرج اللون المخزن سابقا عن طريق shapeprerference ونستعمله في الكود التالي-عوض RED-: holder.text.setTextColor(Color.RED);
  12. سأقدم لك هذا المثال، حيث سيتم عرض الوقت في عنصر TextView، بالشكل التالي: String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date()); // textView عرض التوقيت في textView.setText(currentDateTimeString); يمكنك التعمق أكثر في مختلف دوال الزمن من هنا.
  13. يمكنك الاستعانة بـSDK الخاص بفيس بوك، من هنا والذي سيوفر لك ملف بصيغةJson يحتوي على منشوراتك، ستتفحص الملف وتظهر المنشورات بداخله. كما يمكنك أيضا استعمال graph Apiالمخصص لجلب ىبيانات مجموعة معينة : { "id": "195466193802264", "version": 1, "owner": { "name": "Ravi Grover", "id": "202875" }, "name": "Facebook Developers", "description": "Description.", "venue": { "street": "" }, "privacy": "OPEN", "icon": "http://static.ak.fbcdn.net/rsrc.php/v2/yI/r/0pjqWL1NfkE.png", "updated_time": "2011-03-12T02:43:05+0000", "email": "195466193802264\u0040groups.facebook.com" } ألق نظرة على هذا المقطع:
  14. تستعمل مكتبة LibGDX لغرض برمجة الألعاب على نظام التشغيلAndroid، ويمكنك تحميل المكتبة من هنا. بعد تحميل الملف، قم بتثبيت الملف وذلك بالضغط عليه مرتين ، أدخل الاعدادات التالية: - اترك Name. -اترك Package دون تغيير. -اترك GameClass دون تغيير. -اذهب إلى ملف المشاريع على AndroidStudioProjects وأنشئ مجلد باسم SetupGame\. - غيّر Destination إلى C:\Users\<USER_NAME>\AndroidStudioProjects\SetupGame -غيّر AndrtoidSDK إلى C:\Users\<USER_NAME>\AppData\Local\Android\android-studio\sdk - اترك Sub Projects مفعلة. -اضغط Generate. مقطع الفيديو التالي سيفيدك ويعطيك فكرية حول الموضوع:
  15. برنامج After Effect من إصدارات شركةAdobe العملاقة، ومثله مثل باقي برامج الشركة -تقريبا- من حيث الواجهة، ورغم أنه ليس بالبرنامج السهل لكن يمكن اتقانه بالممارسة و التطبيق: بعض الدروس المفيدة: خاص بالمبتدئين: أيضا: مستوى متقدم:
  16. نعم يمكننا الحصول على عمر شخص معين انطلاقا من استعمال التاريخ Date و Calendar classes -كلاسات الكالندار-، حيث ترتكز هذه الطريقة على أساسيات لغة جافا، والتي يمكن لأي أحد ملمّ بأساسيات اللغة إنجازها. نبدأ بملف Age.java: class Age { private int days; private int months; private int years; private Age() { //الافتراضي constructor } public Age(int days, int months, int years) { this.days = days; this.months = months; this.years = years; } public int getDays() { return this.days; } public int getMonths() { return this.months; } public int getYears() { return this.years; } @Override public String toString() { return years + " Years, " + months + " Months, " + days + " Days"; } } حيث تقبل الوظيفة Age ثلاث عناصر: اليوم، الشهر والسنة أي عناصر التاريخ الأساسية، مع gets و Tostring لتحويل التاريخ إلى نص. الكلاس الثانية هي: AgeCalculator، حيث تقوم هذه الأخيرة بحساب العمر انطلاقا من تاريخ Age بحساب الفرق مقارنة مع تاريخ اليوم: import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class AgeCalculator { private static Age calculateAge(Date birthDate) { int years = 0; int months = 0; int days = 0; // خاص بتاريخ الازدياد المدخل سابقا calendar Calendar birthDay = Calendar.getInstance(); birthDay.setTimeInMillis(birthDate.getTime()); // خاص بتاريخ اليوم calendar long currentTime = System.currentTimeMillis(); Calendar now = Calendar.getInstance(); now.setTimeInMillis(currentTime); //الفرق بين السنوات years = now.get(Calendar.YEAR) - birthDay.get(Calendar.YEAR); int currMonth = now.get(Calendar.MONTH) + 1; int birthMonth = birthDay.get(Calendar.MONTH) + 1; //الفرق بين الأشهر months = currMonth - birthMonth; //فحص فرق الأشهر if (months < 0) { years--; months = 12 - birthMonth + currMonth; if (now.get(Calendar.DATE) < birthDay.get(Calendar.DATE)) months--; } else if (months == 0 && now.get(Calendar.DATE) < birthDay.get(Calendar.DATE)) { years--; months = 11; } //حساب الفرق بين الأيام if (now.get(Calendar.DATE) > birthDay.get(Calendar.DATE)) days = now.get(Calendar.DATE) - birthDay.get(Calendar.DATE); else if (now.get(Calendar.DATE) < birthDay.get(Calendar.DATE)) { int today = now.get(Calendar.DAY_OF_MONTH); now.add(Calendar.MONTH, -1); days = now.getActualMaximum(Calendar.DAY_OF_MONTH) - birthDay.get(Calendar.DAY_OF_MONTH) + today; } else { days = 0; if (months == 12) { years++; months = 0; } } //إنشاء تاريخ ازدياد جديد return new Age(days, months, years); } عملية الحساب انطلاقا من Main: public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date birthDate = sdf.parse("29/11/1981"); //Yeh !! It's my date of birth :-) Age age = calculateAge(birthDate); //العمر هو System.out.println(age); } } المُخرجات: 32 Years, 5 Months, 27 Days يمكنك أيضا الاعتماد على الطريقة المقدمة هنا.
  17. أعتقد أن الاجابة على هذا السؤال راجعة إلى ما تريد برمجته، وإلى كيفية ارتياحك للغة برمجة بالمقارنة مع لغة أخرى، فمثلا أضع بين يديك طريقة كتابة وظيفة، متغير وخاصية على كل من اللغتين: بلغة php: $this->turtle # Instance Property $this->bike() # Method $apple # Variable بلغة ruby: @turtle # Instance Property turtle # "Instance Property" using attr_reader: :turtle bike # Method apple # Variable وعموما هي مسألة تعود وارتياح لبرمجة معينة، لأن أغلب لغات البرمجة حاليا تعتمر على أحدث بنيات بناء الملفات والبرمجة الشيئية OOP في برمجتها، بالاضافة إلى نموذج MVC. مصادر اضافية: Ruby on Rails vs PHP – The good, the bad PHP vs Ruby – Let’s All Just Get Along
  18. لتغيير قاعدة البيانات إلى ترميز utf-8 عليك باستعمال الأمرين التاليين لينجح الأمر: تغيير ترميز قاعدة البيانات: ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; تغيير ترميز الجدول: ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; صورة command:
  19. نعم بإمكانك فعل ذلك، وتوجد برامج عديدة توفر هذه الخدمة، إلا أن معظمها غير مجانية وتوفر امكانات مهمة مقارنة مع المجانية منها، وعلى سبيل المثال، نجد على بيئة ويندوز نجد ImDisk. طريقة العمل: بعد ذلك سيتم تخصيص السعة المحددة مسبقا لـ Ram: يمكنك التوسع في الموضوع من خلال الرايط.
  20. يحتوي هذا المثال على العديد من الامتيازات، فيما يتعلق باستعمال ذاكرة الجهاز، وكذا عدم استهلاك البطارية: AndroidManifest.xml: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.repeatingalarm" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.repeatingalarm.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="MyBroadcastReceiver" > </receiver> </application> </manifest> Layout.xml file: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <EditText android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="28dp" android:ems="10" android:hint="Number of seconds" android:inputType="numberDecimal" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="20dp" android:layout_marginTop="95dp" android:onClick="startAlert" android:text="Make repeat" /> </RelativeLayout> MyBroadcastReceiver java class: /** * */ package com.example.repeatingalarm; import java.util.Date; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; /** * @author Prabu * */ public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, new Date().toString(), Toast.LENGTH_SHORT).show(); } } Activity java class: باستعمال setRepeating package com.example.repeatingalarm; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.Toast; /** * @author Prabu * */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void startAlert(View view) { EditText text = (EditText) findViewById(R.id.time); int i = Integer.parseInt(text.getText().toString()); Intent intent = new Intent(this, MyBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast( this.getApplicationContext(), 234324243, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (i * 1000), (i * 1000), pendingIntent); /*alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (i * 1000), 8000, pendingIntent);*/ Toast.makeText(this, "Starting alarm in " + i + " seconds", Toast.LENGTH_LONG).show(); } } النتيجة: باستعمال setInexactRepeating: package com.example.repeatingalarm; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.Toast; /** * @author Prabu * */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void startAlert(View view) { EditText text = (EditText) findViewById(R.id.time); int i = Integer.parseInt(text.getText().toString()); Intent intent = new Intent(this, MyBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast( this.getApplicationContext(), 234324243, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); /*alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (i * 1000), (i * 1000), pendingIntent);*/ alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (i * 1000), 8000, pendingIntent); Toast.makeText(this, "Starting alarm in " + i + " seconds", Toast.LENGTH_LONG).show(); } } النتيجة: يمكنك تحميل المثال :RepeatingAlarm.zip المصدر : How to make alarm repeat in Android code
  21. تعتمد فكرة أخذ screenshot من خلال تطبيق اندرويد على أخذ مرجع لواجهة الهاتف وتحويلها لصورة bitmap . مثلا: حيث سيكون كود الزر كالتالي: findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Bitmap bitmap = takeScreenshot(); saveBitmap(bitmap); } }); على أن يتم استعمال الدوال: getDrawingCache() و setDrawingCacheEnabled(true) داخل الوظيفة المسؤولة عن أخذ اللقطة: public Bitmap takeScreenshot() { View rootView = findViewById(android.R.id.content).getRootView(); rootView.setDrawingCacheEnabled(true); return rootView.getDrawingCache(); } ثم وظيفة حفظ الصورة: public void saveBitmap(Bitmap bitmap) { File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png"); FileOutputStream fos; try { fos = new FileOutputStream(imagePath); bitmap.compress(CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } catch (FileNotFoundException e) { Log.e("GREC", e.getMessage(), e); } catch (IOException e) { Log.e("GREC", e.getMessage(), e); } } الصورة ستحفظ خارجيا -في external storage- لذا سيتوجب علينا إعطاء التطبيق أحقية ذلك من خلال كتابة السطر التالي داخل AndroidManifest: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  22. للحصول على عناصر تتميز بمقاس بنسبة مئوية، ما عليك إلا أن تدرج العناصر كـ -أبناء- children لـ LinearLayout مع القيمة0.15 ،0.70 أو 0.05 لـ weight، باعبارها نسب مئوية. بهذا الشكل: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/layoutContainer" android:orientation="horizontal"> <RelativeLayout android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="0.15"> </RelativeLayout> <RelativeLayout android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="0.7"> <!-- هذا الجزء يحوي كل العناصر التي سيطبق عليها مقاس النسبة المئوية%70--> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="vertical"> <Button android:text="Button1" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button> <Button android:text="Button2" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button> <Button android:text="Button3" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button> </LinearLayout> <!-- 70% نهاية--> </RelativeLayout> <RelativeLayout android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="0.15"> </RelativeLayout> </LinearLayout> سنحصل على الصورة التالية: حيث أن الأزرار ذات مقاس 70% من LinearLayout.
  23. يتضح من الرسالة الظاهرة أن نظام التشغيل لا يتوافق والبرنامج المثبت، لذا وجب عليك التأكد من أن Python المثبت متوافق مع نظام التشغيل على حاسوبك، أي هل هو 32bit أو 64bit، هذا من جهة. من جهة أخرى، قد ينتج هذا المشكل عن عدم توفر الجهاز على++Visual C، لذا من الجيد أن تثبته على حاسوبك من خلال هذا الرابط. وهذه الطريقة الكاملة لتحميل وتثبيتPython على حاسوبك -بيئة Windows- :
  24. يمكنك معاجة المشكل من خلال تغيير Adobe World-Ready Mode وذلك بذهابك إلى القائمة: Windows > Paragraph > panel menu وقم باختيار : Adobe World-Ready Paragraph Composer: ولجعل الكتابة من جهة اليمين، عيل بتغير منحى الكتابة، كما هو مبين: Typesetting Hebrew and Other Languages in English InDesign
  25. كما تعلم تعتمد html على عدة وسوم ، تختلف كل منها حسب حاجة المبرمج، لذا وجب علينا احترام البنية المبنية بها الصفحة ليتم التفاعل مع مختلف مكوناتها عبر css أو jquery، حيث أن هذه الأخيرةjquery- هي من ستساعدنا على إنشاء SlideShow أو شرائح منزلقة، وذلك بكتابة كودHtmlالتالي: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Sliding-enabled slideshow using jQuery | Script Tutorials</title> <meta name="description" content="Sliding-enabled slideshow using jQuery demo - Script Tutorials"> <!-- include to stylesheet --> <link rel="stylesheet" href="css/style.css" type="text/css" /> <!-- include jQuery library and other javascripts --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="js/jquery.scrollTo.js"></script> <script src="js/jquery.localscroll.js"></script> <script src="js/custom-scripts.js"></script> </head> <body> <div id="slideshow"> <!-- List of slider images --> <ul> <li id="slide1"><img src="images/slide1.jpg" alt="Slide 1" /></li> <li id="slide2"><img src="images/slide2.jpg" alt="Slide 2" /></li> <li id="slide3"><img src="images/slide3.jpg" alt="Slide 3" /></li> <li id="slide4"><img src="images/slide4.jpg" alt="Slide 4" /></li> <li id="slide5"><img src="images/slide5.jpg" alt="Slide 5" /></li> </ul> </div> <div id="slideshow-nav"> <!-- Navigation list of slider images --> <ul> <li><a href="#slide1">Slide 1</a></li> <li><a href="#slide2">Slide 2</a></li> <li><a href="#slide3">Slide 3</a></li> <li><a href="#slide4">Slide 4</a></li> <li><a href="#slide5">Slide 5</a></li> </ul> </div> </body> </html> ثم ملف css المُنظم لشكل ظهور مختلف العناصر الموجودة في الصفحة: css/style.css #slideshow {/*slider container css*/ width: 800px; height: 400px; overflow: hidden; margin: 50px auto 50px auto; box-shadow: 0px 0px 50px #333; -moz-box-shadow: 0px 0px 50px #333; -webkit-box-shadow: 0px 0px 50px #333; } #slideshow ul {/*manage slider scroll elements css*/ width: 4000px; list-style: none; } #slideshow ul li { float: left; } إضافة بعض التأثيرات -ملف css-: #slideshow-nav {/* Slider navigation container css */ width: 150px; margin: 0 auto 100px auto; } #slideshow-nav ul { list-style: none; } #slideshow-nav ul li { float: left; } #slideshow-nav ul li a {/* navigation styling css */ display: block; width: 20px; height: 20px; float: left; margin: 0 5px; background: #fff; text-indent: -9999px; border-radius: 50%; -webkit-border-radius: 50%; box-shadow: 0px 0px 30px #000; -webkit-box-shadow: 0px 0px 30px #000; } #slideshow-nav ul li a:hover, #slideshow-nav ul li a.active { /* hover and active navigation css */ background: #333; } بعد ربط ملف Html بسكريبت javascript، في ملف : js/custom-scripts.js نقوم بكتابة الكود : $(document).ready(function() { var slider = $("#slideshow"); var slider_nav = $("#slideshow-nav"); slider_nav.find("a[href=#slide1]").addClass("active"); slider_nav.localScroll({ target:'#slideshow', axis: 'x' }); slider_nav.find("a").click(function(){ slider_nav.find("a").removeClass("active"); $(this).addClass("active"); }); }); رابط المثال. المصدر: كيفيَّة إنشاء عرض شرائح قابل للتَّحريك باستخدام jQuery
×
×
  • أضف...