BOOT पर Android 10.0 एप्लिकेशन स्टार्टअप

Nov 02 2020

हमारे पास एक एंड्रॉइड एप्लिकेशन है जिसे हम फोन बूट के दौरान शुरू / लॉन्च करने का इरादा रखते हैं। एंड्रॉइड 10 में कुछ कोड की कोशिश के साथ, हमने महसूस किया कि बूट पर ऐप लॉन्च करना, एंड्रॉइड 8.0 के बाद संभव नहीं है। पहले एंड्रॉइड 6 में, यह संभव था। यहां तक ​​कि भौतिक उपकरण / फोन / एमुलेटर एंड्रॉइड 10 में, हमने ऑटोस्टार्ट सूची को हमारे आवेदन की अनुमति दी। << उद्देश्य: किसी भी तरह से (वर्कअराउंड) बूट पर ऐप लॉन्च करने के लिए नवीनतम संस्करण, यानी एंड्रॉइड 8 पर भी? >>

हमारे द्वारा एंड्रॉइड 10 में किए गए प्रयास: कोड के 3 सेक्शन हैं - AndroidManifest.xml, MyActivity.java, MyBroadcastReceiver.java

1) AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<activity android:name=".MainActivity"  android:launchMode="singleTop" android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true" android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>

2) MyActivity.java

public class MainActivity extends FlutterActivity {
@java.lang.Override
protected void onCreate(android.os.Bundle savedInstanceState) { 
super.onCreate(savedInstanceState);
// "Display pop up window"
    if (!Settings.canDrawOverlays(getApplicationContext())) {
        startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION));
    }
Log.d(TAG, "-------- onCreate -------"); // this is printed
}
}

3) MyBroadcastReceiver.java

public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent i = new Intent(context, MainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(i);
Log.d(TAG, "------ tried to launch MainActivity -------"); // this is printed
}
}
}

जवाब

AtickFaisal Nov 02 2020 at 16:38

बूट पर ऐप शुरू करना उपयोगकर्ता को परेशान कर सकता है। आप इसके बजाय एक फोरग्राउंड सेवा शुरू कर सकते हैं । BOOT_COMPLETE इरादा आपके डिवाइस के आधार पर कई अलग-अलग रूपों में हो सकता है। मैंने यहां उन सभी को पकड़ने की कोशिश की है।

अपने घोषणापत्र में:

<receiver android:name=".receiver.BootReceiver" // YOUR RECEIVER HERE
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.ACTION_BOOT_COMPLETED" />
            <action android:name="android.intent.action.REBOOT" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
            <action android:name="android.intent.action.ACTION_SHUTDOWN" />
        </intent-filter>
    </receiver>

और रिसीवर में:

class BootReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        // START FOREGROUND SERVICE HERE
    }
}