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

E.Nourddine

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

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

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

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

    18

أجوبة بواسطة E.Nourddine

  1. يمكنك فعل ذلك عن طريق استعمال حلقة التكرار مرتين، حيث الحلقة الأولى(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();
    	}
        }
    }
    

    سيكون الناتج:

    Screenshot from 2016-05-15 17:44:22.png

    المصدر:print 2d-java

  2. باعتبار أن لديك مصفوفة تضم لائحة الأرقام ، سنقوم بتفحص المصفوفة عبر دالة 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

  3. لفعل ذلك قم بالخطوات التالية:

    • على برنامج Eclipse أنشيء تطبيق.
    • أنشيءLayout يتوفر على <WebView>.
    • أُنقل كود Html إلى ملف assets/
    • قم بعمل Load لملف file:///android_asset/ file
    • وتكون قد حصلت على تطبيق اندرويد.

    ويمكنك أيضا الاستعانة بـ Adobe PhoneGap

    • أعجبني 2
  4. سأقدم هنا مثال عمل لربط التطبيق بـ 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>

    التصميم سيكون كالآتي:

    android_web_Service.png

    أنشيء 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:

     

  5. على اندرويد يمكن إنشاء 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

  6. برنامج ansroid studio في إصداره الثاني -2-، يدعم RTL لكن هذه الخاصية غير مفعلة بشكل افتراضي، ولتفعيلها:

    • على حاسوبك، اذهب إلى المسار :
    [android-studio2.0]/bins/idea.properties
    • ثم  أضف السطر

    editor.new.rendering=true

    في آخر idea.properties

    • أعد تشغيل برنامج android studio.
  7. يعتمد ارسال الإشعارات من جهاز لآخر على خدمة secrver-cleint حيث يكون جهازك هو client ويستقبل باقي الإشعارات من الجهاز الآخر.

    إذا كان هذا ما تصبو إليه، إليك هذا الرابط.

    هذه الصورة توضح كيفية العمل:

    gcm-a-modr.png

    ثم هذا المقطع:

     

  8. لتخزين القيم، سنستعمل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);

     

  9. سأقدم لك هذا المثال، حيث سيتم عرض الوقت في عنصر TextView، بالشكل التالي:

    String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
    
    // textView عرض التوقيت في
    textView.setText(currentDateTimeString);

    يمكنك التعمق أكثر في مختلف دوال الزمن من هنا.

  10. يمكنك الاستعانة بـ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" 
    }

    ألق نظرة على هذا المقطع:

     

  11. تستعمل مكتبة LibGDX لغرض برمجة الألعاب على نظام التشغيلAndroid، ويمكنك تحميل المكتبة من هنا.

    Libgdx-Download.jpg

    بعد تحميل الملف، قم بتثبيت الملف وذلك بالضغط عليه مرتين ، أدخل الاعدادات التالية:

    - اترك 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.

    LibgdxSetup.jpg

    مقطع الفيديو التالي سيفيدك ويعطيك فكرية حول الموضوع:

     

  12. برنامج After Effect من إصدارات شركةAdobe العملاقة، ومثله مثل باقي برامج الشركة -تقريبا- من حيث الواجهة، ورغم أنه ليس بالبرنامج السهل لكن يمكن اتقانه بالممارسة و التطبيق:

    بعض الدروس المفيدة:

    خاص بالمبتدئين:

    أيضا:

    مستوى متقدم:

     

  13. نعم يمكننا الحصول على عمر شخص معين انطلاقا من استعمال التاريخ 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

    يمكنك أيضا الاعتماد على الطريقة المقدمة هنا.

    • أعجبني 1
  14. أعتقد أن الاجابة على هذا السؤال راجعة إلى ما تريد برمجته، وإلى كيفية ارتياحك للغة برمجة بالمقارنة مع لغة أخرى، فمثلا  أضع بين يديك طريقة كتابة وظيفة، متغير وخاصية على كل من اللغتين:

    بلغة 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.

    مصادر اضافية:

  15. لتغيير قاعدة البيانات إلى ترميز 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:

    Screenshot from 2016-05-11 23:08:46.png

  16. نعم بإمكانك فعل ذلك، وتوجد برامج عديدة توفر هذه الخدمة، إلا أن معظمها غير مجانية وتوفر امكانات مهمة مقارنة مع المجانية منها، وعلى سبيل المثال، نجد على بيئة ويندوز نجد ImDisk.

    طريقة العمل:

    20140124_ramdisk_1.jpg

    بعد ذلك سيتم تخصيص السعة المحددة مسبقا لـ Ram:

    20140124_ramdisk_2.jpg

    يمكنك التوسع في الموضوع من خلال الرايط.

  17. يحتوي هذا المثال على العديد من الامتيازات، فيما يتعلق باستعمال ذاكرة الجهاز، وكذا عدم استهلاك البطارية:

    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();
     }
    
    }

    النتيجة:

    1.png

    باستعمال 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();
     }
    
    }

    النتيجة:

    4.png

    يمكنك تحميل المثال :RepeatingAlarm.zip

    المصدر : How to make alarm repeat in Android code

  18. تعتمد فكرة أخذ screenshot من خلال تطبيق اندرويد على أخذ مرجع لواجهة الهاتف وتحويلها لصورة bitmap .

    مثلا:

    screenshot.jpg

    حيث سيكون كود الزر كالتالي:

    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" />

     

  19. للحصول على عناصر تتميز بمقاس بنسبة مئوية، ما عليك إلا أن تدرج العناصر كـ -أبناء- 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>

    سنحصل على الصورة التالية:

    HM356.jpg

    حيث أن الأزرار ذات مقاس 70% من LinearLayout.

  20. يتضح من الرسالة الظاهرة أن نظام التشغيل لا يتوافق والبرنامج المثبت، لذا وجب عليك التأكد من أن Python المثبت متوافق مع نظام التشغيل على حاسوبك، أي هل هو  32bit أو 64bit، هذا من جهة.

     من جهة أخرى، قد ينتج هذا المشكل عن عدم توفر الجهاز على++Visual C، لذا  من الجيد أن تثبته على حاسوبك من خلال هذا الرابط.

    وهذه الطريقة الكاملة لتحميل وتثبيتPython على حاسوبك -بيئة Windows- :

     

  21. يمكنك معاجة المشكل من خلال تغيير Adobe World-Ready Mode وذلك بذهابك إلى القائمة:

    Windows > Paragraph > panel menu

    وقم باختيار : Adobe World-Ready Paragraph Composer:

    ids_jfd_hbrw3.jpg

    ولجعل الكتابة من جهة اليمين، عيل بتغير منحى الكتابة، كما هو مبين:

    ids_jfd_hbrw5.jpg

    Typesetting Hebrew and Other Languages in English InDesign

    • أعجبني 1
  22. كما تعلم تعتمد 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

    • أعجبني 1
  23. لحل هذا المشكل عليك باتباع الخطوات التالية:

    1. قم بفتح النافذة الخاصة بـ SDK Manager وحمَل Intel x86 Emulator Accelerator (HAXM installer) إذا لم تكن قد قمت بتحميله من قبل.
    2. الآن اذهب إلى المسار التالي: C:\users\username\AppData\Local\Android\sdk, generally ، ثم  بداخل
       extras > intel > Hardware_Accelerated_Execution_Manager
      قم بعمل run للملف المسمى  "intelhaxm-android.exe" .
    3. في حال ظهرت لك الرسالة التالية:
      In case you get an error like "Intel virtualization technology (vt,vt-x) is not enabled". Go to your BIOS settings and enable Hardware Virtualization.
      قم بإعادة تشغييل برنامج Android Studio ثم كرر عملية إطلاق AVD مرة أخرى.

    العملية تأخذ حوالي دقيقتين لإظهار نافذة المحاكي.

     

×
×
  • أضف...