L'appel d'une méthode d'une Activité de BroadCastReceiver classe sans la création de l'instance d'activité
Je veux faire exactement la même chose mentionné dans la question dans le lien suivant L'appel d'une activité de méthode à partir d'un BroadcastReceiver classe. Mais la solution donnée il n'y a pas de travail pour moi et je ne peux pas commenter là que je n'ai pas assez de réputation. J'ai fait tout ce qui est mentionné dans la solution, mais mon récepteur de radiodiffusion ne fonctionne pas avec ce code.
Je veux juste appeler la méthode dans l'activité de réception de la demande de diffusion sans la création d'une instance de l'activité. Peut-il être fait?
EDIT: Maintenant, je suis en ajoutant le code.
Voici ma classe MainActivity
public class MainActivity extends Activity {
public static final String TAG="App1";
private ActionReceiver receiver = null;
//private YourBroadcastReceiverClassName yourBR = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//receiver= new ActionReceiver();
//IntentFilter filter = new IntentFilter();
//filter.addAction("com.example.app1.printSomething");
//printSomething();
}
public void printSomething(){
Toast.makeText(this,"Hello World",Toast.LENGTH_LONG);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
C'est mon ActionReceiver classe qui est BroadcastReceiver
public class ActionReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if("com.example.app1.printSomething".equalsIgnoreCase(intent.getAction()))
Toast.makeText(context,"Hello World", Toast.LENGTH_LONG).show();
}
}
C'est mon
AndroidManifest.xml
fichier:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app1"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="16" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.app1.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=".ActionReceiver">
<intent-filter>
<action android:name="com.example.app1.printSomething"/>
</intent-filter>
</receiver>
</application>
</manifest>
Maintenant, je veux l'appeler printSomething()
Méthode écrite dans MainActivity
de onReceive()
dans ActionReceiver
classe. Mais je ne veux pas lancer MainActivity
. Peut-il être fait?
Salut @PrathibhaKirthi je l'ai fait dans hardway. Je me suis inscrit à un récepteur de radiodiffusion pour mainactivity et je l'utilise pour appeler la méthode.
J'ai fait la même @KIran..travail.. 🙂
OriginalL'auteur Kiran | 2013-10-10
Vous devez vous connecter pour publier un commentaire.
vous pouvez appeler une méthode à l'intérieur de MainActivity sans instanciation. Vous avez juste besoin d'aller chercher une référence à l'Activité d'hébergement. Rendre statique n'est pas obligatoire:
dans MainActivity:
Salut, quand j'ai essayé d'exécuter la ligne ci-dessus dans
OnReceive()
méthode deBroadcastReceiver
, il donne une erreur en disant ne pouvez pas trouver le symbole de la méthodegetActivity()
. Pouvez-vous me dire ce que je suis absent?vous devez obtenir le contexte de l'activité. Je pensais que c'était getActivity(). Je l'ai regardé, vous avez besoin de contexte.printSomething(). Je vais modifier ma réponse
Salut, j'ai mis à jour mon code en utilisant contexte
((MainActivity)context.getApplicationContext()).printSomething()
dansonReceive()
méthode deBroadcastReceiver
. L'application est installée à la perfection. Dans la deuxième application que je suis en créant une émission intention pour ce Récepteur, mais "l'application s'arrête de manière inattendue". Donc, pouvez-vous me dire si cela fonctionne?psot certains errorlog de logcat s'il vous plaît. dur de le comprendre, d'autre
OriginalL'auteur bofredo
Si u juste besoin d'exécuter une méthode sans créer une instance, faire que la méthode statique.
si u ne peut pas faire que de la méthode statique, vous devez obtenir l'instance de cette activité.
EDIT:
si tu veux exécuter une méthode dans une instance, vous devez créer une instance de la. cela signifie que u ont à la création et au démarrage d'une activité. si tu veux exécuter une méthode sans l'activité, il suffit de créer la méthode statique.
modifier la méthode dans l'activité:
et ensuite appeler à partir de votre diffusion:
(new MainActivity()).thatMethod()
Mais ça ne fonctionne pas...vous ne pouvez pas créer une instance de cette activité. vous devez définir cette instance dans la classe avec la diffusion de le faire. Je suis désolé, mais sans le code, je ne peux pas comprendre ce que tu veux faire
Salut, j'ai joint mon code avec mon post. Pouvez-vous m'aider maintenant?
J'ai modifié ma réponse. est la seule façon de u peut le faire (sans une instance de l'activité)
j'ai essayé ceci, mais ne fonctionne pas . toute autre solution plz ??
OriginalL'auteur carlo.marinangeli
Il y a peu de solutions possibles, vous pouvez utiliser Local Récepteur de Radiodiffusion afin d'envoyer le message à votre activité, dans ce cas, vous devez vous abonner à votre activité.
Ou vous pouvez utiliser EventBus pour ce, qui pourrait être Otto événement bus ou GreenDroid... Dans ce cas, vous devez faire de même, abonnez-vous votre activité de manifestation des bus, mais de façon plus élégante 🙂
OriginalL'auteur Viktor Yakunin
Créer un Rappel
Vous pouvez utiliser cette interface pour communiquer à l'Activité(c'est à dire en invoquant les méthodes de l'Activité).
1) Créer une interface de Rappel
2) Ajouter ce Rappel dans votre récepteur de Radiodiffusion
3) mettre en Œuvre dans votre Activité et de Remplacer les
doSomeTask()
méthodeLien Pertinent:
Si vous voulez lire un même explication plus approfondie, vous pouvez LIRE CE
OriginalL'auteur Rohit Singh
Vous pouvez le faire comme ceci dans le BroadcastReceiver classe:-
OriginalL'auteur genius