Mon application qui n'est pas sur Play Store Vérifiez sur le Web s'il y a une nouvelle version et le téléchargement et le démarrez. Après l'installation, je voudrais redémarrer l'application et j'utiliserais un BroadcastRecevier
avec ACTION_PACKAGE_REPLACED
. Ceci est le code:
diffusion :
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)){
ApplicationInfo app = new ApplicationInfo();
if(app.packageName.equals("it.Android.downloadapk")){
Intent LaunchIntent = context.getPackageManager().getLaunchIntentForPackage(app.packageName);
context.startActivity(LaunchIntent);
}
}
}
Manifeste :
<receiver Android:name="it.Android.downloadapk.Broadcast">
<intent-filter>
<action Android:name="Android.intent.action.ACTION_PACKAGE_REPLACED"></action>
<data Android:scheme="package" Android:path="it.Android.downloadapk" />
</intent-filter>
</receiver>
Le problème est que lorsque j'installe Nouveau APK, la diffusion semble ne pas commencer, pourquoi?
regarde ça:
Comment savoir mon Android Application a été mis à niveau afin de réinitialiser une alarme?
correct Correction est que vous utilisez la mauvaise chaîne dans le manifeste: http://developer.android.com/reference/android/content/intent.html#action_Package_Replaced
il devrait être "android.inent.action.acackage_replacé" à la place.
ok, je vois que ce que j'ai écrit n'est toujours pas suffisant pour l'essayer, alors je ferai une exception et publierai tout un projet juste pour montrer que cela fonctionne: l'application est dans un package appelé "com.broadcast_recefeiver_test". N'oubliez pas de l'exécuter avant de tester, sinon cela ne fonctionnera pas sur certains Android versions (je pense à API 11+).
manifeste:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.broadcast_receiver_test" Android:versionCode="1"
Android:versionName="1.0">
<uses-sdk Android:minSdkVersion="3" />
<application Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name">
<activity Android:name=".BroadcastReceiverTestActivity"
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">
<intent-filter>
<action Android:name="Android.intent.action.PACKAGE_REPLACED"/>
<data Android:scheme="package" />
</intent-filter>
<intent-filter>
<action Android:name="Android.intent.action.PACKAGE_REMOVED"/>
<data Android:scheme="package" />
</intent-filter>
<intent-filter>
<action Android:name="Android.intent.action.PACKAGE_ADDED"/>
<data Android:scheme="package" />
</intent-filter>
</receiver>
</application>
</manifest>
MyBroadcastrecefer.java:
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(final Context context,final Intent intent)
{
final String msg="intent:"+intent+" action:"+intent.getAction();
Log.d("DEBUG",msg);
Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();
}
}
s'il vous plaît, courez-le et voyez que cela fonctionne parfaitement.
EDIT: Si votre application est destinée à API12 et ci-dessus, et souhaite uniquement gérer le cas de la mise à jour de votre application, vous pouvez utiliser cette intention seule:
http://developer.android.com/reference/andrroid/content/intent.html#action_my_package_replacé
Je mets le récepteur suivant dans l'androidmanifest.xml
<receiver Android:name=".StartupReceiver">
<intent-filter>
<action Android:name="Android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
<intent-filter>
<action Android:name="Android.intent.action.MY_PACKAGE_REPLACED"/>
</intent-filter>
</receiver>
Mon application peut donc être lancée sur la mise à jour ainsi que le redémarrage de périphériques. Bien que tout le monde a mentionné que vous avez besoin de l'API 12+ pour My_Package_Replacé.
Après deux jours de lutte et d'expérimentation, j'ai découvert la raison. Il s'est avéré que j'ai besoin de lire attentivement la documentation officielle.
Comme dit ici: https://developer.android.com/reference/andrroid/content/intente#action_my_package_replacé
Il s'est avéré que la phrase clé est la suivante: il ne contient aucune donnée supplémentaire
celles. Si vous avez changé le manifeste, l'application ne redémarre pas après la mise à jour
je vous en prie