آموزش به دست آوردن اپلیکیشن های نصب شده + آیکون در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش های برنامه نویسی اندروید به آموزش به دست آوردن اپلیکیشن های نصب شده + آیکون در برنامه نویسی اندروید می پردازیم به نظرم نیاز به توضیح اضافه ندارد البته در این آموزش ما از CardView و RecyclerView برای متریال دیزاین شدن برنامه استفاده می کنیم در ادامه می توانید پیش نمایشی از ماحصل برنامه را ببینید.
این آموزش بسیار کاربردی است تا آخر با ما همراه باشید.
در ابتدا چون می خواهیم از RecyclerView و CardView استفاده کنیم پس باید کتاب خانه های آن را اضافه کنیم.
پس برای اینکار وارد فایل Build.gradle از نوع module شده و کد زیر را در بخش dependencies اضافه کنید.
1 2 | compile 'com.android.support:cardview-v7:23.3.+' compile 'com.android.support:recyclerview-v7:23.3.+' |
دوستان در صورتی که خطا داشتید باید مقدار 23 را تغییر دهید (قبلا توضیح داده ایم)
حالا پروژه را sync کنید
ما هم RecyclerView و هم CardView را جدا توضیح داده ایم و آن را در اینجا دوباره تکرار نخواهیم کرد در سایت می توانید این آموزش ها را پیدا کنید.
کد مربوط به activity_main.xml همانند زیر می شود این صفحه اصلی ما می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?xml version="1.0" encoding="utf-8"?> <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="com.android_examples.getinstalledappiconname_android_examplescom.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="vertical" /> </RelativeLayout> |
همانطور که میبنید در آن یک RecyclerView قرار دارد .
حالا ما یک کلاس به نام ApkInfoExtractor.java کار این کلاس از نام آن پیدا است عکس و نام اپلیکیشن ها را برای ما استخراج می کند ما بخش های این کد را به صورت چندین پست سوا در سایت قرار داده ایم به طور مثال نحوه کار کردن با Package Manager و… می توانید با کمی جستجو تمامی آنها را یاد بگیرید.
پس کد مربوط به ApkInfoExtractor.java همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package ir.programchi; import android.content.Context; import android.content.Intent; import java.util.ArrayList; import java.util.List; import android.content.pm.ApplicationInfo; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; /** * Created by Juned on 4/15/2017. */ public class ApkInfoExtractor { Context context1; public ApkInfoExtractor(Context context2){ context1 = context2; } public List<String> GetAllInstalledApkInfo(){ List<String> ApkPackageName = new ArrayList<>(); Intent intent = new Intent(Intent.ACTION_MAIN,null); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED ); List<ResolveInfo> resolveInfoList = context1.getPackageManager().queryIntentActivities(intent,0); for(ResolveInfo resolveInfo : resolveInfoList){ ActivityInfo activityInfo = resolveInfo.activityInfo; if(!isSystemPackage(resolveInfo)){ ApkPackageName.add(activityInfo.applicationInfo.packageName); } } return ApkPackageName; } public boolean isSystemPackage(ResolveInfo resolveInfo){ return ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0); } public Drawable getAppIconByPackageName(String ApkTempPackageName){ Drawable drawable; try{ drawable = context1.getPackageManager().getApplicationIcon(ApkTempPackageName); } catch (PackageManager.NameNotFoundException e){ e.printStackTrace(); drawable = ContextCompat.getDrawable(context1, R.mipmap.ic_launcher); } return drawable; } public String GetAppName(String ApkPackageName){ String Name = ""; ApplicationInfo applicationInfo; PackageManager packageManager = context1.getPackageManager(); try { applicationInfo = packageManager.getApplicationInfo(ApkPackageName, 0); if(applicationInfo!=null){ Name = (String)packageManager.getApplicationLabel(applicationInfo); } }catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return Name; } } |
حالا باید یک Layout درست کنیم به نام cardview_layout.xml که محتوای هر کدام از آپلیکیشن ها در آن نمایش پیدا می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_width="fill_parent" android:layout_height="70dp" card_view:cardElevation="5dp" card_view:contentPadding="5dp" card_view:cardCornerRadius="5dp" card_view:cardMaxElevation="5dp" android:layout_margin="5dp" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="60dp" > <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher" android:layout_marginTop="6dp" /> <TextView android:id="@+id/Apk_Name" android:layout_toRightOf="@id/imageview" android:layout_toEndOf="@id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000" android:layout_marginTop="6dp" android:layout_marginLeft="4dp" /> <TextView android:id="@+id/Apk_Package_Name" android:layout_below="@id/Apk_Name" android:layout_toEndOf="@id/imageview" android:layout_toRightOf="@id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:textColor="#795548" /> </RelativeLayout> </android.support.v7.widget.CardView> |
بعد از این کار باید آداپتور مربوط به RecyclerView را ایجا کنیم تا مقادیر را از کلاس ApkInfoExtractor دریافت کرده و به صورن یک لیست هر اپلیکیشن را نمایش دهد.
پس یک فایل به نام AppsAdapter.java ایجاد کرده و کد های زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | package ir.programchi; /** * Created by Jefferson on 4/14/2017. */ import android.content.Context; import android.content.Intent; import android.widget.ImageView; import android.support.v7.widget.RecyclerView; import android.widget.Toast; import android.view.View; import android.widget.TextView; import android.graphics.drawable.Drawable; import android.support.v7.widget.CardView; import android.view.LayoutInflater; import android.view.ViewGroup; import java.util.List; public class AppsAdapter extends RecyclerView.Adapter<AppsAdapter.ViewHolder>{ Context context1; List<String> stringList; public AppsAdapter(Context context, List<String> list){ context1 = context; stringList = list; } public static class ViewHolder extends RecyclerView.ViewHolder{ public CardView cardView; public ImageView imageView; public TextView textView_App_Name; public TextView textView_App_Package_Name; public ViewHolder (View view){ super(view); cardView = (CardView) view.findViewById(R.id.card_view); imageView = (ImageView) view.findViewById(R.id.imageview); textView_App_Name = (TextView) view.findViewById(R.id.Apk_Name); textView_App_Package_Name = (TextView) view.findViewById(R.id.Apk_Package_Name); } } @Override public AppsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ View view2 = LayoutInflater.from(context1).inflate(R.layout.cardview_layout,parent,false); ViewHolder viewHolder = new ViewHolder(view2); return viewHolder; } @Override public void onBindViewHolder(ViewHolder viewHolder, int position){ ApkInfoExtractor apkInfoExtractor = new ApkInfoExtractor(context1); final String ApplicationPackageName = (String) stringList.get(position); String ApplicationLabelName = apkInfoExtractor.GetAppName(ApplicationPackageName); Drawable drawable = apkInfoExtractor.getAppIconByPackageName(ApplicationPackageName); viewHolder.textView_App_Name.setText(ApplicationLabelName); viewHolder.textView_App_Package_Name.setText(ApplicationPackageName); viewHolder.imageView.setImageDrawable(drawable); //Adding click listener on CardView to open clicked application directly from here . viewHolder.cardView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = context1.getPackageManager().getLaunchIntentForPackage(ApplicationPackageName); if(intent != null){ context1.startActivity(intent); } else { Toast.makeText(context1,ApplicationPackageName + " Error, Please Try Again.", Toast.LENGTH_LONG).show(); } } }); } @Override public int getItemCount(){ return stringList.size(); } } |
و در آخر هم کد های مربوط به MainActivity.java همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package ir.programchi; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.GridLayoutManager; public class MainActivity extends AppCompatActivity { RecyclerView recyclerView; RecyclerView.Adapter adapter; RecyclerView.LayoutManager recyclerViewLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.recycler_view); recyclerViewLayoutManager = new GridLayoutManager(MainActivity.this, 1); recyclerView.setLayoutManager(recyclerViewLayoutManager); adapter = new AppsAdapter(MainActivity.this, new ApkInfoExtractor(MainActivity.this).GetAllInstalledApkInfo()); recyclerView.setAdapter(adapter); } } |
این آموزش هم به پایان رسید.
موفق و موید باشید.
سلام
وقت بخیر اقای مهندس
لطفا اگه میشه بگید چجوری میتونم فقط اپیکیشن خاصی رو نمایش بدم
ممنون از آموزش های عالیتون
سلام
برای اینکه یک اپ خاصی را باز کنید باید از کلاس Intent استفاده کنید مثال زیر را توجه کنید.
به جای com.package.address باید نام اپلیکیشن که می خواید باز بشه (packagename) را قرار دهید.
ممنون از راهنمایتون
خواهش می کنم.
با سلام
من تازه با سایت بی نظیرتون آشنا شدم
اول تشکر بکنم بابت تمامی آموزش های کاربری و مفیدتون 🙂
یک سوال داشتم ما با گرفتن این لیست از برنامه ها میتونیم چه استفاده ای در اپلیکیشن خودمون از اونا بکنیم؟
سلام و درود
با گرفتن این لیست می تونید لیست اپ های نصبی را نمایش آنها را حذف یا clear cache بکنید بستگی به کارتان دارد.
با سلام تو رو خدا جواب بدین ممنون میشم
اول ممنون بابت آموزش های خوب سایت
میخواستم بگم چجوری میشه با کلیک روی هر کدوم از این کاردویو ها که یه اپلیکیشن رو نشون میدن، اطلاعات اون اپلیکیشن رو بدست آورد؟
یعنی تابعی باشه که نام و پکیج و آیکون رو برگردونه
باتشکر
سلام و درود
از کد زیر استفاده کنید.
موفق باشید.