2014-04-08 2 views
0

인 텐트를 사용하여 앱 내의 클래스 (활동 또는 서비스)간에 소량의 데이터를 전송하는 방법. 명확하게 보여줄 필요가있는 활동과 서비스에는 차이가 있습니다. 정보는 여러 가지 답변으로 여러 부분에 흩어져 있습니다. 많은 답이 서비스에 대한 잘못된 정보를 제공합니다.Android : 앱 내의 클래스간에 약간의 데이터 전송

답변

1

적은 양의 데이터로 인 텐트를 사용하여 한 클래스에서 다른 클래스로 데이터를 전달할 수 있습니다. 여기에서 나는 한 곳에서 기본 원리를 보여 주려고 노력한다. 당신은 당신이 원하는대로 당신의 의도를 더욱 복잡하게 만들 수 있습니다.

SENDING : 활동 또는 서비스 클래스 둘 다에서. 키 이름은 원하는대로 지정할 수 있습니다. 따옴표로 묶여 있어야합니다. 그것은 수신 클래스에서 언급 된 유일한 것입니다. 또한 상황에 따라 "getApplicationContext()"대신 "this"또는 "context"를 사용할 수 있습니다.

Intent i = new Intent(getApplicationContext(), ClassName.class); 
    i.putExtra("AnyKeyName1", intName1); // an int value, no quotes 
    i.putExtra("AnyKeyName2", "String Value 1"); // string in quotes 
    i.putExtra("AnyKeyName3", StringVariable1); // string variable, no quotes 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // other additions 
    startService(i); 


수신하는 ACTIVITY AND SERVICE IN DIFFERENT CLASSES된다. 활동 IN받는

:

public void onCreate(Bundle bundle) { 
    int var1 = getIntent().getIntExtra("AnyKeyName1"); 
    String var2 = getIntent().getStringExtra("AnyKeyName2"); 
    String var3 = getIntent().getStringExtra("AnyKeyName3"); 

서비스 IN 수신 : 당신은 "getIntent()"를 사용할 수 없습니다. 기본값을 제공해야합니다 (의도가 아무 것도받지 못하는 경우 원하는 값으로 설정). 기본값과 함께 많은 유연성을 제공합니다.

public int onStartCommand(Intent intent, int flags, int startId) { 
    int var1 = intent.getIntExtra("AnyKeyName1", defaultInt); 
    String var2 = intent.getStringExtra("AnyKeyName2", "default String"); 
    String var3 = intent.getStringExtra("AnyKeyName3", defaultStringVar);