প্রোগ্রামটিতে অ্যান্ড্রয়েডে অ্যাপ্লিকেশন আইকনটি কীভাবে পরিবর্তন করবেন?


153

প্রোগ্রাম থেকে সরাসরি কোনও অ্যাপ্লিকেশন আইকন পরিবর্তন করা সম্ভব?
মানে, ফোল্ডারে পরিবর্তন icon.pngকরুন res\drawable
আমি ব্যবহারকারীদের প্রোগ্রামটি থেকে অ্যাপ্লিকেশনটির আইকনটি পরিবর্তন করতে দিতে চাই তাই পরবর্তী সময় তারা প্রবর্তকটিতে পূর্ববর্তী নির্বাচিত আইকনটি দেখতে পাবে।

উত্তর:


79

এটি একটি পুরানো প্রশ্ন, তবে কোনও স্পষ্টত অ্যান্ড্রয়েড বৈশিষ্ট্য না থাকায় এখনও সক্রিয়। এবং ফেসবুকের ছেলেরা চারপাশে একটি কাজ খুঁজে পেয়েছিল - কোনওভাবে। আজ, আমি একটি উপায় খুঁজে পেয়েছি যা আমার পক্ষে কাজ করে। নিখুঁত নয় (এই উত্তরটির শেষে মন্তব্য দেখুন) তবে এটি কার্যকর!

মূল ধারণাটি হ'ল, আমি আমার অ্যাপ্লিকেশনটির শর্টকাটের আইকনটি আপডেট করি, যা আমার হোম স্ক্রিনে লঞ্চার দ্বারা নির্মিত। আমি যখন শর্টকাট-আইকনটিতে কিছু পরিবর্তন করতে চাই, আমি প্রথমে এটি সরিয়ে ফেলি এবং একটি নতুন বিটম্যাপ দিয়ে পুনরায় তৈরি করি।

কোডটি এখানে। এটি একটি বোতাম আছে increment। চাপলে, শর্টকাটটি এমন একটিতে প্রতিস্থাপিত হয় যার একটি নতুন গণনা নম্বর রয়েছে।

প্রথমে আপনার প্রকাশ্যে এই দুটি অনুমতি দরকার:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />

তারপরে শর্টকাটগুলি ইনস্টল এবং আনইনস্টল করার জন্য আপনার এই দুটি পদ্ধতি দরকার। shortcutAddপদ্ধতি এটি একটি নম্বরে কোনো বিটম্যাপ তৈরি করে। এটি কেবল এটি প্রদর্শিত হয় যে এটি আসলে পরিবর্তিত হয়। আপনি সম্ভবত কিছু অংশ দিয়ে সেই অংশটি পরিবর্তন করতে চান, আপনি আপনার অ্যাপ্লিকেশনটিতে চান।

private void shortcutAdd(String name, int number) {
    // Intent to be send, when shortcut is pressed by user ("launched")
    Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
    shortcutIntent.setAction(Constants.ACTION_PLAY);

    // Create bitmap with number in it -> very default. You probably want to give it a more stylish look
    Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
    Paint paint = new Paint();
    paint.setColor(0xFF808080); // gray
    paint.setTextAlign(Paint.Align.CENTER);
    paint.setTextSize(50);
    new Canvas(bitmap).drawText(""+number, 50, 50, paint);
    ((ImageView) findViewById(R.id.icon)).setImageBitmap(bitmap);

    // Decorate the shortcut
    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);

    // Inform launcher to create shortcut
    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(addIntent);
}

private void shortcutDel(String name) {
    // Intent to be send, when shortcut is pressed by user ("launched")
    Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
    shortcutIntent.setAction(Constants.ACTION_PLAY);

    // Decorate the shortcut
    Intent delIntent = new Intent();
    delIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    delIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);

    // Inform launcher to remove shortcut
    delIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(delIntent);
}

এবং পরিশেষে, প্রথম শর্টকাট যুক্ত করতে এবং একটি ইনক্রিমেন্টিং কাউন্টার সহ শর্টকাট আপডেট করার জন্য এখানে দুটি শ্রোতা রয়েছে।

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.test);
    findViewById(R.id.add).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            shortcutAdd("changeIt!", count);
        }
    });
    findViewById(R.id.increment).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            shortcutDel("changeIt!");
            count++;
            shortcutAdd("changeIt!", count);
        }
    });
}

মন্তব্য:

  • এই পদ্ধতি কাজ করে যদি আপনার অ্যাপটি হোম স্ক্রীনে যেমন বিভিন্ন অতিরিক্ত এর সঙ্গে সম্পর্কে আরো শর্টকাট নিয়ন্ত্রণ Intent। তাদের কেবল আলাদা আলাদা নাম প্রয়োজন যাতে ডানটি একটি আনইনস্টল করে পুনরায় ইনস্টল করা হয়।

  • অ্যান্ড্রয়েডের শর্টকাটগুলির প্রোগ্রাম্যাটিকাল হ্যান্ডলিং একটি সুপরিচিত, বহুল ব্যবহৃত কিন্তু আনুষ্ঠানিকভাবে সমর্থিত অ্যান্ড্রয়েড বৈশিষ্ট্য নয়। এটি ডিফল্ট লঞ্চারটিতে কাজ করছে বলে মনে হচ্ছে এবং আমি এটি অন্য কোথাও চেষ্টা করেছিলাম না। সুতরাং আমাকে দোষারোপ করবেন না, যখন আপনি এই ব্যবহারকারী-ইমেলগুলি পান "এটি আমার এক্সওয়াইজেড, ডাবল রুটেড, সুপার ব্লাস্টড ফোনে কাজ করে না"

  • Toastশর্টকাট ইনস্টলড হয়ে যাওয়ার পরে শর্টকাট আনইনস্টল করা অবস্থায় একটি লিখেছে writes সুতরাং আমি Toastপ্রতিবার আইকনটি পরিবর্তন করার সময় দু'জন পাই। এটি নিখুঁত নয়, তবে যতক্ষণ না আমার অ্যাপের বাকি অংশগুলি নিখুঁত ...


9
আজকের ক্যালেন্ডার অ্যাপ্লিকেশনটি টোস্ট ছাড়াই রোজ আইকনগুলি ক্যান করে।
জিম ম্যাককিথ

1
@ জিম (আমার মনে হয়) এটি আসলে একটি উইজেট
জ্যাকসঅনএফ 1

3
শর্টকাটডেল দুর্ভাগ্যক্রমে মার্শমেলোতে আর কাজ করে না, দেখুন
স্ট্যাকওভারফ্লো.

2
এটি শর্টকাট আইকনটি প্রতিস্থাপন করে, লঞ্চার আইকনটি প্রতিস্থাপন করে না
user1506104

3
প্লেক্লাস এবং ধ্রুবকগুলি কি নীচের লাইনে রয়েছে A shortcutIntent.setAction (Constants.ACTION_PLAY);
দশরথ সিং বাজরোলিয়া

136

এটি চেষ্টা করুন, এটি আমার পক্ষে ভাল কাজ করে:

ঘ। আপনার পরিবর্তন MainActivityঅধ্যায় AndroidManifest.xmlসঙ্গে সঙ্গতিপূর্ণ, তা থেকে মুছে ফেলা, MAINবিভাগ intent-filterঅধ্যায়

<activity android:name="ru.quickmessage.pa.MainActivity"
    android:configChanges="keyboardHidden|orientation"
    android:screenOrientation="portrait"
    android:label="@string/app_name"
    android:theme="@style/CustomTheme"
    android:launchMode="singleTask">
    <intent-filter>
        ==> <action android:name="android.intent.action.MAIN" /> <== Delete this line
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

ঘ। <activity-alias>আপনার প্রতিটি আইকন জন্য তৈরি করুন । এটার মত

<activity-alias android:label="@string/app_name" 
    android:icon="@drawable/icon" 
    android:name=".MainActivity-Red"
    android:enabled="false"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>   
</activity-alias>

ঘ। প্রোগ্রামগতভাবে সেট করুন: যথাযথের জন্য ENABLE এট্রিবিউট সেট করুনactivity-alias

 getPackageManager().setComponentEnabledSetting(
        new ComponentName("ru.quickmessage.pa", "ru.quickmessage.pa.MainActivity-Red"), 
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

দ্রষ্টব্য, সর্বদা কমপক্ষে একটি সক্ষম করা আবশ্যক।


3
দুর্ভাগ্যক্রমে আমি চেষ্টা করেছি এমন ডিভাইসগুলিতে আলাদাভাবে কাজ করে। এইচটিসি ডিজায়ার ২.২ এ কাজ করে তবে গ্যালাক্সি নেক্সাস ৪.২.২ এবং নেক্সাস 4. ৪.৩ এ বিশ্বাসযোগ্য নয়। গ্যালাক্সি নেক্সাসে, অ্যাপ্লিকেশনটি অদৃশ্য হয়ে যাওয়ার জন্য সমস্ত আইকন এবং যে কোনও উইজেট সরিয়ে ফেলা হতে পারে। করুণা, সুতরাং আমাকে পরবর্তী ডিভাইসে এই কার্যকারিতাটি সরিয়ে ফেলতে হবে।
রিচার্ড লে ম্যাসুরিয়ার

7
যেহেতু আমি এটিকে মুছে ফেলেছি সেহেতু আমি আমার অ্যাপ্লিকেশন চালু করতে পারি না: <ক্রমটি অ্যান্ড্রয়েড: নাম = "android.intent.action.MAIN" /> <বিভাগ অ্যান্ড্রয়েড: নাম = "android.intent.category.LAUNCHER" />
noobProgrammer

1
এটি অ্যাপ ট্রে এবং হোমস্ক্রিনে লঞ্চার আইকনগুলির মধ্যে স্যুইচ করার জন্য আমার পক্ষে পুরোপুরি কাজ করে, তবে আমি দেখতে পেয়েছি যে ওএস স্তরে ব্যবহৃত আইকন (যেমন মাল্টি-টাস্কিং, আনইনস্টল পপআপ, বা অ্যাপ্লিকেশন ম্যানেজারের তালিকায়) অবশিষ্ট রয়েছে আপনি ম্যানিফেস্টে অ্যাপ্লিকেশন পর্যায়ে কোনও সেট না করে থাকলে আসল বা ডিফল্ট জেনেরিক অ্যান্ড্রয়েড আইকন হয়ে যায়। আপনি কি এর সমাধান খুঁজে পেয়েছেন, বা ওএস স্তরের আইকনটিতে কেবল কোনও অমিল (বা অনুপস্থিতি) সহ্য করছেন?
জোকিফ

2
অ্যাপ্লিকেশন চালাতে ত্রুটি। ডিফল্ট ক্রিয়াকলাপ খুঁজে পাওয়া যায় নি।
কক্সঅনরোড

1
অ্যাপ্লিকেশন চালাতে ত্রুটি। ডিফল্ট ক্রিয়াকলাপ খুঁজে পাওয়া যায় নি
কামিল ইবাদভ

36

সফ্টওয়্যার আপগ্রেড ব্যতীত আপনি স্বাক্ষরিত এবং সিল করা APK তে ম্যানিফেস্ট বা সংস্থানটি পরিবর্তন করতে পারবেন না।


2
@ ন্যান: এটি অ্যাপ্লিকেশন আইকন নয়, একটি অ্যাপ্লিকেশন উইজেট বা হোম স্ক্রিন বৈশিষ্ট্য। আপনি এখনও সফ্টওয়্যার আপগ্রেড ব্যতীত ম্যানিফেস্ট বা সংস্থান পরিবর্তন করতে পারবেন না।
কমন্সওয়্যার

1
? না, আমি অন্য উপায়ে বলতে চাইছি: এটি কোনও উইজেট নয় as আমি এটিকে একটি অ্যাপ শর্টকাট হিসাবে যুক্ত করছি। তবে, যেমন আপনি বলেছেন, কেবলমাত্র এই ননস্টক স্টাফটি তার কেবল একটি আইকন বোঝায় তাই এর অর্থ এটি নয় :)
Nanne

2
@ নেটটিইনস্টেআইএন: এটি সমস্ত হোম স্ক্রিনের জন্য কাজ করবে না (উদাহরণস্বরূপ, যারা উপাদান-সক্ষম সক্ষম পরিবর্তনের দিকে মনোযোগ দেয় না)।
কমন্সওয়েয়ার

1
আর সত্য নয়। অ্যান্ড্রয়েডে গুগল ক্যালেন্ডার 6+ দৈনিক ভিত্তিতে লঞ্চারে পরিবর্তন। আজ, আইকনটি একটি "2", গতকাল এটি একটি "1" ছিল। সাধারণত, আইকনটিতে একটি "31" ছিল। তবে আর নয়, পরিবর্তন হয়। এটা কীভাবে সম্ভব কেউ জানেন?
UeliDeSchwert

1
@ ববি: আমার অর্থ হ'ল প্লে স্টোরটিতে হোম স্ক্রীন বাস্তবায়নের শত শত, না হলেও হাজার হাজার, অ্যানড্রয়েড ডিভাইস মডেলগুলির কয়েক হাজার বিভিন্ন প্রাক-ইনস্টলড হোম স্ক্রিন ছাড়াও রয়েছে। এই হোম স্ক্রিন বাস্তবায়নগুলি এমন হুকগুলি স্বাগত জানায় যা গতিশীল লঞ্চার আইকন প্রতিস্থাপনের অনুমতি দেয়। তবে, সমস্ত হোম স্ক্রিনগুলিতে এটি অফার করতে হবে না। আপনি কেবল একটি ডিভাইসে একটি হোম স্ক্রিনে একটি অ্যাপ্লিকেশনের জন্য এই আচরণটি দেখছেন তার অর্থ এই নয় যে এটি সমস্ত ডিভাইসে সমস্ত হোম স্ক্রিনে সমস্ত অ্যাপ্লিকেশানের জন্য উপলব্ধ।
কমন্সওয়্যার

17

প্রাথমিকভাবে, আপনি নিজেই অ্যাপ্লিকেশন লঞ্চটি প্রকাশ করতে চাইতে পারেন:

দ্রষ্টব্য: এই পদ্ধতিটি আর অ্যান্ড্রয়েড 8.0 - ওরিও দিয়ে শুরু করে কাজ করে না

আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল এ যুক্ত করুন:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>

তারপরে আপনার অ্যাপ্লিকেশন লঞ্চারের উদ্দেশ্যটি তৈরি করতে হবে:

Intent myLauncherIntent = new Intent();
myLauncherIntent.setClassName("your.package.name", "YourLauncherActivityName");
myLauncherIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

আপনার অ্যাপ্লিকেশন লঞ্চার এবং কাস্টম আইকন দিয়ে একটি ইনস্টল শর্টকাট উদ্দেশ্য তৈরি করুন:

Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, myLauncherIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Application Name");
intent.putExtra
       (
        Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
        Intent.ShortcutIconResource.fromContext
                                    (
                                         getApplicationContext(), 
                                         R.drawable.app_icon
                                    )
       );
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");

এবং অবশেষে সম্প্রচারের উদ্দেশ্যটি চালু করুন:

getApplicationContext().sendBroadcast(intent);

এটি শর্টকাট আইকনটি প্রতিস্থাপন করে, লঞ্চ আইকনটির পরিবর্তে নয়
user1506104

10

ধরে নিচ্ছেন আপনার হোম স্ক্রিনে প্রদর্শিত আইকনটি পরিবর্তন করার অর্থ এটি সহজেই একটি উইজেট তৈরি করে সহজেই করা যেতে পারে। এখানে একটি নিবন্ধ যা দেখায় যে এটি কীভাবে আইফোনের অনুরূপ "নতুন বার্তা" টাইপ অ্যাপ্লিকেশনটির জন্য সম্পন্ন করা যায়:

http://www.cnet.com/8301-19736_1-10278814-251.html


9

@ পিএ এর সমাধানটি আমার জন্য আংশিকভাবে কাজ করে। নীচে আমার অনুসন্ধানগুলি বিস্তারিত:

1) প্রথম কোড স্নিপেটটি ভুল, নীচে দেখুন:

<activity
    ...
    <intent-filter>
        ==> <action android:name="android.intent.action.MAIN" /> <== This line shouldn't be deleted, otherwise will have compile error
        <category android:name="android.intent.category.LAUNCHER" /> //DELETE THIS LINE
    </intent-filter>
</activity>

2) অন্য আইকন সক্ষম করার আগে সমস্ত আইকন অক্ষম করতে নিম্নলিখিত কোডগুলি ব্যবহার করা উচিত, অন্যথায় এটি প্রতিস্থাপনের পরিবর্তে এটি একটি নতুন আইকন যুক্ত করবে।

getPackageManager().setComponentEnabledSetting(
        getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

কিন্তু, আপনি যদি উপরে কোড ব্যবহার করেন তবে হোমস্ক্রিনে শর্টকাটটি সরানো হবে! এবং এটি স্বয়ংক্রিয়ভাবে আর যুক্ত হবে না। আপনি প্রোগ্রামিকভাবে আইকনটি ফিরে যুক্ত করতে সক্ষম হতে পারেন তবে এটি সম্ভবত আগের মতো অবস্থানে থাকবে না।

3) নোট করুন যে আইকনটি তত্ক্ষণাত পরিবর্তন হবে না, এটি কয়েক সেকেন্ড সময় নিতে পারে। আপনি যদি পরিবর্তনের পরে ঠিক এটি ক্লিক করেন, আপনি সম্ভবত একটি ত্রুটি পেয়ে যাবেন: "অ্যাপ্লিকেশন ইনস্টল করা নেই"।

সুতরাং, আইএমএইচও এই সমাধানটি কেবল অ্যাপ লঞ্চারে আইকন পরিবর্তনের জন্য উপযুক্ত, শর্টকাটের জন্য নয় (যেমন হোমস্ক্রিনের আইকন)


2
অ্যাপ্লিকেশন চালাতে ত্রুটি। ডিফল্ট ক্রিয়াকলাপ খুঁজে পাওয়া যায় নি।
কক্সঅনরোড

আপনি লঞ্চারটি মুছবেন, এটি কীভাবে ডিফলিংয়ের ডিফল্ট ক্রিয়াকলাপটি খুঁজে পাবে?
j2emanue

5

এই সমাধান চেষ্টা করুন

<activity android:name=".SplashActivity"
        android:label="@string/app_name"
        android:icon="@drawable/ic_launcher">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity-alias android:label="ShortCut"
        android:icon="@drawable/ic_short_cut"
        android:name=".SplashActivityAlias"
        android:enabled="false"
        android:targetActivity=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

আপনি যখন নিজের অ্যাপ্লিকেশন আইকনটি পরিবর্তন করতে চান নীচের কোডটি যুক্ত করুন

PackageManager pm = getPackageManager();
                    pm.setComponentEnabledSetting(
                            new ComponentName(YourActivity.this,
                                    "your_package_name.SplashActivity"),
                            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                            PackageManager.DONT_KILL_APP);

                    pm.setComponentEnabledSetting(
                            new ComponentName(YourActivity.this,
                                    "your_package_name.SplashActivityAlias"),
                            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                            PackageManager.DONT_KILL_APP);

4

AndroidManifest.xml উদাহরণ:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name="com.pritesh.resourceidentifierexample.MainActivity"
                  android:label="@string/app_name"
                  android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <!--<category android:name="android.intent.category.LAUNCHER"/>-->
            </intent-filter>
        </activity>

        <activity-alias android:label="RED"
                        android:icon="@drawable/ic_android_red"
                        android:name="com.pritesh.resourceidentifierexample.MainActivity-Red"
                        android:enabled="true"
                        android:targetActivity="com.pritesh.resourceidentifierexample.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias android:label="GREEN"
                        android:icon="@drawable/ic_android_green"
                        android:name="com.pritesh.resourceidentifierexample.MainActivity-Green"
                        android:enabled="false"
                        android:targetActivity="com.pritesh.resourceidentifierexample.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias android:label="BLUE"
                        android:icon="@drawable/ic_android_blue"
                        android:name="com.pritesh.resourceidentifierexample.MainActivity-Blue"
                        android:enabled="false"
                        android:targetActivity="com.pritesh.resourceidentifierexample.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

    </application>

তারপরে নীচে প্রদত্ত কোডটি অনুসরণ করুন MainActivity:

ImageView imageView = (ImageView)findViewById(R.id.imageView);
            int imageResourceId;
            String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
            int hours = new Time(System.currentTimeMillis()).getHours();
            Log.d("DATE", "onCreate: "  + hours);

            getPackageManager().setComponentEnabledSetting(
                    getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

            if(hours == 13)
            {
                imageResourceId = this.getResources().getIdentifier("ic_android_red", "drawable", this.getPackageName());
                getPackageManager().setComponentEnabledSetting(
                        new ComponentName("com.pritesh.resourceidentifierexample", "com.pritesh.resourceidentifierexample.MainActivity-Red"),
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
            }else if(hours == 14)
            {
                imageResourceId = this.getResources().getIdentifier("ic_android_green", "drawable", this.getPackageName());
                getPackageManager().setComponentEnabledSetting(
                        new ComponentName("com.pritesh.resourceidentifierexample", "com.pritesh.resourceidentifierexample.MainActivity-Green"),
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

            }else
            {
                imageResourceId = this.getResources().getIdentifier("ic_android_blue", "drawable", this.getPackageName());
                getPackageManager().setComponentEnabledSetting(
                        new ComponentName("com.pritesh.resourceidentifierexample", "com.pritesh.resourceidentifierexample.MainActivity-Blue"),
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

            }

            imageView.setImageResource(imageResourceId);

আমি com.pritesh.resourceidentifierexample.MainActivity-Red doesn't exist in com.pritesh.resourceidentifierexampleব্যতিক্রম পাচ্ছি । এখানে আমি আপনার প্রকাশ্য নামটি কেবল আমার সমস্যাটি প্রদর্শনের জন্য ব্যবহার করেছি
তেজাস পান্ড্য

0

মার্কাস কাজ করে সমাধান পেতে আমার প্রথম ইনটেন্টটি দরকার তাই হ'ল:

Intent myLauncherIntent = new Intent(Intent.ACTION_MAIN);
            myLauncherIntent.setClassName(this,  this.getClass().getName());
            myLauncherIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

0

উল্লিখিত পরামর্শগুলি প্রয়োগ করে, যখনই ডিফল্ট আইকনটি নতুন আইকনে পরিবর্তিত হয় তখন আমি অ্যাপটিকে মেরে ফেলার সমস্যাটির মুখোমুখি হয়েছি। তাই কিছু টুইট দিয়ে কোডটি প্রয়োগ করেছেন। ধাপ 1). অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে, অ্যান্ড্রয়েডের সাথে ডিফল্ট ক্রিয়াকলাপের জন্য তৈরি করুন: সক্ষম = "সত্য" এবং অ্যান্ড্রয়েড সহ অন্যান্য উপন্যাস: সক্ষম = "মিথ্যা"। আপনার এতে অ্যান্ড্রয়েড যুক্ত রয়েছে তবে এটি যুক্ত হবে না: সক্ষম = "সত্য"।

       <activity
        android:name=".activities.SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/SplashTheme">

    </activity>
    <!-- <activity-alias used to change app icon dynamically>   : default icon, set enabled true    -->
    <activity-alias
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:name=".SplashActivityAlias1" <!--put any random name started with dot-->
        android:enabled="true"
        android:targetActivity=".activities.SplashActivity"> <!--target activity class path will be same for all alias-->
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>
    <!-- <activity-alias used to change app icon dynamically>  : sale icon, set enabled false initially -->
    <activity-alias
        android:label="@string/app_name"
        android:icon="@drawable/ic_store_marker"
        android:roundIcon="@drawable/ic_store_marker"
        android:name=".SplashActivityAlias" <!--put any random name started with dot-->
        android:enabled="false"
        android:targetActivity=".activities.SplashActivity"> <!--target activity class path will be same for all alias-->
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

ধাপ ২). এমন একটি পদ্ধতি তৈরি করুন যা ডিফল্ট আইকন সহ প্রথম ক্রিয়াকলাপ-ওরফে অক্ষম করতে ব্যবহার করা হবে এবং আইকন সহ ২ য় উপন্যাস সক্ষম করতে এটি পরিবর্তন করা দরকার।

/**
 * method to change the app icon dynamically
 *
 * @param context
 * @param isNewIcon  : true if new icon need to be set; false to set default 
 * icon
 */

public static void changeAppIconDynamically(Context context, boolean isNewIcon) {
    PackageManager pm = context.getApplicationContext().getPackageManager();
    if (isNewIcon) {
        pm.setComponentEnabledSetting(
                new ComponentName(context,
                        "com.example.dummy.SplashActivityAlias1"), //com.example.dummy will be your package
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);

        pm.setComponentEnabledSetting(
                new ComponentName(context,
                        "com.example.dummy.SplashActivityAlias"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
    } else {
        pm.setComponentEnabledSetting(
                new ComponentName(context,
                        "com.example.dummy.SplashActivityAlias1"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);

        pm.setComponentEnabledSetting(
                new ComponentName(context,
                        "com.example.dummy.SplashActivityAlias"),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
    }
}

ধাপ 3). এখন আপনার প্রয়োজনের উপর নির্ভর করে এই পদ্ধতিটি কল করুন, বোতাম ক্লিক করুন বা তারিখ নির্দিষ্ট বা উপলক্ষ নির্দিষ্ট শর্তাবলী বলুন, সহজভাবে -

// Switch app icon to new icon
    GeneralUtils.changeAppIconDynamically(EditProfileActivity.this, true);
// Switch app icon to default icon
            GeneralUtils.changeAppIconDynamically(EditProfileActivity.this, false);

আশা করি এটি তাদের মধ্যে যারা অ্যাপ্লিকেশনটির সমস্যার মুখোমুখি হয়ে আইকন পরিবর্তনে মারা যাবেন তাদের সহায়তা করবে। শুভ কোডিং :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.