2016-08-16 4 views
1

メッセージを受信するとすぐに、受信者側でテキストビューを更新したいと考えています。主なアクティビティのインスタンスを作成し、それをブロードキャスト受信機で使用してUIを更新する次のコードがあります。しかし、テキストビューは更新されていませんか? smsreceiverクラスブロードキャストレシーバでTextViewを更新する

public class smsreceiver extends BroadcastReceiver 
{ 
try{ 

      if (MainActivity.getInst()!=null) 
       MainActivity.getInst().updateUI(str); 

     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
} 

public class Mainactivity extends activity{ 
private static MainActivity ins; 

public static MainActivity getInst() 
{ 
    return ins; 
} 
protected void onCreate(Bundle savedInstanceState) { 
ins=this;} 
public void updateUI(final String s) 
{ 
MainActivity.this.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     TextView textView=(TextView) findViewById(R.id.textView); 
     textView.setText(s); 
    } 
}); 
} 

私を助けてください!

+0

はどこ 'setContentView()'と 'super.onCreate() 'は? – Opiatefuchs

+0

固定されていますか? –

+0

私のアプリにはいくつかの問題がありました。優先度の高いSMSアプリケーションがこのアプリでメッセージを受信できないようにしていました。このコードは、UIの更新に適しています。とにかくおかげでみんな – user3170131

答えて

0

あなたは以下のようにしよう:

public class Mainactivity extends activity{ 

    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.your_layout); 
     //register your receiver 
    } 

    protected void onDestroy() { 

     //unregister your receiver 
     super.onDestroy(); 
    } 
    public void updateUI(final String s) 
    { 
     MainActivity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       TextView textView=(TextView) findViewById(R.id.textView); 
       textView.setText(s); 
      } 
     }); 
    } 

    private class smsreceiver extends BroadcastReceiver 
    { 
     try{ 

      updateUI(str) 

     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 
0

これは、あなたがそれを

パブリッククラスMainActivityアクティビティ {

private static MainActivity ins; 

private Button mButton; 

public static MainActivity getInst() 
{ 
    return ins; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ins = this; 

    mButton = (Button) findViewById(R.id.but_send); 

    mButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent inten = new Intent(MainActivity.this, SmsReceiver.class); 
      inten.setAction("com.example.demo.action.info"); 
      sendBroadcast(inten); 
     } 
    }); 
} 

public void updateUI(final String s) 
{ 
    MainActivity.this.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     TextView textView=(TextView) findViewById(R.id.tv_info); 
     textView.setText(s); 
    } 
}); 
} 

}

を拡張して働くことができるコードの私のコードベースであります

public class SmsReceiverはBroadcastReceiverを拡張します {

@Override 
public void onReceive(Context context, Intent intent) { 
    try { 
     if (MainActivity.getInst() != null) 
      MainActivity.getInst().updateUI("Hello World"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}

<receiver android:name="com.example.demoexample.SmsReceiver" > 
     <intent-filter> 
      <action android:name="com.example.demo.action.info" /> 
     </intent-filter> 
    </receiver> 
関連する問題