1. [THÔNG BÁO] TẤT CẢ NHỮNG BÀI VIẾT ĐĂNG KHÔNG ĐÚNG CHUYÊN MỤC SẼ BỊ BAN NIK VÀ XÓA TOÀN BỘ POST, CÁC BÀI VIẾT NẾU KHÔNG CÓ BOX PHÙ HỢP ĐỂ POST THÌ CÓ THỂ POST VÀO 2 CHUYÊN MỤC CUỐI DIỄN ĐÀN LÀ "BACKLINK FREE" VÀ "CÁC VẤN ĐỀ KHÁC"
    Dismiss Notice
  2. Dismiss Notice

Activity từ BroadcastReceiver trong Android

Thảo luận trong 'Các vấn đề khác' bắt đầu bởi nuong, 28 Tháng mười hai 2015.

    Chia sẻ trang này

  1. nuong
    Offline

    nuong

    Bài viết:
    17
    Được thích:
    0
    Ví dụ trước đây cho thấy làm thế nào mà các tin nhắn SMS được nhận sẽ được hiển thị trong các hoạt động. Tuy nhiên, trong nhiều trường hoạt động của bạn có thể được trong nền khi tin nhắn SMS nhận được. Trong trường hợp này, nó sẽ rất hữu ích để có thể mang lại cho các hoạt động đến các nền trước khi nhận tin nhắn. Sau đây chúng tôi sẽ cho bạn thấy chúng hoạt động thế nào khi lap trinh android.

    - Sử dụng cùng một dự án tạo ra trong phần trước, thêm những câu lệnh chưa có vào tập tin MainActivity.java:

    Mã:
    /**Called when the activity is first created.*/[/SIZE][/FONT]
    [SIZE=4][FONT=Georgia]
    @Override
    public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //---intent to filter for SMSmessages received---
    intentFilter=new IntentFilter();
    intentFilter.addAction(“SMS_RECEIVED_ACTION”);
    //---register the receiver---
    registerReceiver(intent Receiver, intent Filter);
    btnSendSMS=(Button)findViewById(R.id.btnSendSMS);
    btnSendSMS.setOnClickListener(newView.OnClickListener()
    {
    public void onClick(View v)
    {
    //sendSMS(“5554”,“Hellomyfriends!”);
    Intenti=new Intent(android.content.Intent.ACTION_VIEW);
    i.putExtra(“address”,“5556;5558;5560”);
    i.putExtra(“sms_body”,“Hellomyfriends!”);
    i.setType(“vnd.android-dir/mms-sms”);
    startActivity(i);
    }
    });
    }
    @Override
    protected void onResume(){
    //---registerthereceiver---//
    registerReceiver(intent Receiver, intent Filter);
    super.onResume();
    }
    @Override
    protected void onPause(){
    //---unregister the receiver---//
    unregisterReceiver(intent Receiver);
    super.onPause();
    }
    @Override
    protected void onDestroy() {
    //---unregister the receiver---
    unregisterReceiver(intent Receiver);
    super.onPause();
    }

    - Thêm các lệnh sau vào tập tin SMSReceiver.java:
    Mã:
    [/SIZE][/FONT]
    [SIZE=4][FONT=Georgia]@Override
    public void onReceive(Context context,Intent intent)
    {
    //---get the SMSmessage passed in---
    Bundle bundle=intent.getExtras();
    SmsMessage[]msgs=null;
    Stringstr=“”;
    if(bundle!=null)
    {
    //---retrieve the SMS message received---
    Object[]pdus=(Object[])bundle.get(“pdus”);
    msgs=new SmsMessage[pdus.length];
    for(inti=0;i<msgs.length;i++){
    msgs[i]=SmsMessage.createFromPdu((byte[])pdus[i]);
    str+=“SMSfrom“+msgs[i].getOriginatingAddress();
    str+=“:”;
    str+=msgs[i].getMessageBody().toString();
    str+=“\n”;
    }
    //---displaythenewSMSmessage---
    Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
    //---launch the MainActivity---
    Intent mainActivityIntent = new Intent(context, MainActivity.class);
    mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(mainActivityIntent);
    //---sendabroadcasttoupdatetheSMSreceivedintheactivity---
    Intent broadcastIntent=newIntent();
    broadcastIntent.setAction(“SMS_RECEIVED_ACTION”);
    broadcastIntent.putExtra(“sms”,str);
    context.sendBroadcast(broadcastIntent);
    }
    }

    >> Khóa học lập trình android cơ bản nâng cao tịa hà nội
    - Sửa đổi các tập tin main.xml như sau
    Mã:
    [/SIZE][/FONT]
    [SIZE=4][FONT=Georgia]<activity android:name=”.MainActivity”
    android:label=”@string/app_name”
    android:launchMode=”singleTask” >
    <intent-filter>
    <action android:name=”android.intent.action.MAIN”/>
    <category android:name=”android.intent.category.LAUNCHER”/>
    </intent-filter>
    </activity>

    - Nhấn F11 để gỡ lỗi các ứng dụng trên Android Emulator. Khi MainActivity được hiển thị, hãy nhấp vào nút Home để gửi hoạt động đến nền.

    - Sử dụng DDMS để gửi một tin nhắn SMS đến các giả lập một lần nữa. Thời gian này, lưu ý rằng hoạt động này sẽ được đưa đến phía trước, hiển thị các tin nhắn SMS nhận được.

    Cách hoạt động
    Trong lớp MainActivity, đầu tiên bạn đăng ký BroadcastReceiver trong sự kiện onCreate() (của hoạt động, thay vì) sự kiện onResume(); và thay vì sự đăng ký của nó trong sự kiện onPause(), bây giờ bạn chưa đăng ký của nó trong sự kiện onDestroy(). Điều này đảm bảo rằng ngay cả khi hoạt động này là ở chế độ nền, nó vẫn sẽ có thể lắng nghe những Intent.

    Tiếp theo, bạn sửa đổi sự kiện onReceive() trong lớp SMSReceiver bằng cách sử dụng một ý định để mang lại những hoạt động tới tiền cảnh trước khi phát sóng ý khác:
    Mã:
    [/SIZE][/FONT]
    [SIZE=4][FONT=Georgia]//---launch the MainActivity---
    Intent mainActivityIntent = new Intent(context, MainActivity.class);
    mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(mainActivityIntent);
    //---sendabroadcasttoupdatetheSMSreceivedintheactivity---
    Intent broadcastIntent=new Intent();
    broadcastIntent.setAction(“SMS_RECEIVED_ACTION”);
    broadcastIntent.putExtra(“sms”,str);
    context.sendBroadcast(broadcastIntent);


    Phương pháp startActivity() ra mắt hoạt động và mang nó đến nền trước. Lưu ý rằng bạn cần phải thiết lập các cờ Intent.FLAG_ACTIVITY_NEW_TASK bởi vì gọi startActivity() từ bên ngoài của một bối cảnh hoạt động đòi hỏi cờ FLAG_ACTIVITY_NEW_TASK.

    Bạn cũng cần phải thiết lập các thuộc tính launchMode của <activity> phần tử trong tập tin AndroidManifest.xml để singleTask:
    Mã:
    [/SIZE][/FONT]
    [SIZE=4][FONT=Georgia]<activity android:name=”.MainActivity”
    android:label=”@string/app_name”
    android:launchMode=”singleTask” >


    Nếu bạn không đặt này, nhiều trường hợp của các hoạt động sẽ được đưa ra như là ứng dụng của bạn nhận được tin nhắn SMS.

    Lưu ý rằng trong ví dụ này, khi hoạt động này là ở chế độ nền (chẳng hạn như khi bạn nhấp vào nút Home để hiển thị các màn hình chủ), hoạt động này được đưa đến phía trước và TextView của nó được cập nhật với các tin nhắn SMS nhận được. Tuy nhiên, nếu hoạt động này đã bị giết chết (chẳng hạn như khi bạn nhấp chuột vào nút Back để tiêu diệt nó), hoạt động này được đưa ra một lần nữa nhưng TextView không được cập nhật.

    --------------- || ---------------
    Trung tâm đào tạo học lập trình Mobile với các Khóa học laptrinhandroid.net.vn nâng cao tại VietPro!
     
>

Chia sẻ trang này