Android實現強制下線(不同應用之間)功能————簡易微信聊天示例
阿新 • • 發佈:2018-12-29
Android的實現強制下線(不同應用之間)功能----簡易微信聊天示例
強制下線功能需要先關閉所有活動,然後在回到登入介面。
新建一個ActivityCollector類管理所有活動。下見程式碼段:
//需要用到一個專門的集合類對所有的活動進行管理 public class ActivityCollector { public static List<Activity> activities = new ArrayList<>();//通過一個List來暫存活動 public static void addActivity(Activity activity){ activities.add(activity);//提供了一個addActivity()方法用於向List中新增一個活動 } public static void removeActivity(Activity activity){ activities.remove(activity);//提供了一個addActivity()方法用於從List中移除一個活動 } public static void finishAll(){//finish()方法用於將List中儲存的活動全部銷燬掉 for (Activity activity : activities){ if (!activity.isFinishing()){ activity.finish(); } } activities.clear(); } }
在BaseSActivity.java中呼叫
首先需要我們希望在另外一個應用點選了[強制下線]的按鈕時,當前應用不論在哪個頁面,都可以接受到此類廣播。如果在每個活動上都註冊一個廣播接受器時,常會導致程式碼冗餘。
答案其實很明顯,只需新建一個類(命名:BaseSActivity.java),註冊一個廣播接受器,並且,讓所有活動都繼承BaseSActivity.java這樣強制下線的功能就不會依附任何介面。
在同一個模型下的應用,接受廣播是使用的onResume()和的onPause()方法註冊和取消註冊廣播。
如果在不同型號之間聯絡的應用,使用上述方法是行不通的。採用動態註冊的廣播接受器
例如:A應用:傳送廣播B應用:接受廣播
甲應用傳送廣播,B應用等待接收。當執行切換程式(A→B)的操作時,系統就會呼叫的onPause()方法。此時,廣播已經被登出。在乙應用也就無法接收來自甲應用的廣播。
因此,選擇在的onCreate()和onDestory()方法執行廣播的註冊和登出。
以下是部分程式碼:
一個應用:傳送廣播
forceOffline.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.danser.mywechat.ForceOfflineReceiver"); sendBroadcast(intent); } });
乙應用:接受廣播
public class BaseActivity extends AppCompatActivity {
private ForceOfflineReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.danser.mywechat.ForceOfflineReceiver");//接受廣播
receiver = new ForceOfflineReceiver();//註冊廣播器
registerReceiver(receiver,intentFilter);
}
@Override
protected void onDestroy() {///取消註冊廣播器
super.onDestroy();
if (receiver != null){
unregisterReceiver(receiver);
receiver = null;
}
ActivityCollector.removeActivity(this);
}
class ForceOfflineReceiver extends BroadcastReceiver{
@Override
public void onReceive(final Context context, Intent intent) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);//使用Builder構建一個對話方塊
builder.setTitle("提示");
builder.setMessage("你的微訊號在其他裝置上登入," +
"如不是本人操作,請及時更改密碼!");
builder.setCancelable(false);//將對話方塊設定為不可取消
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCollector.finishAll();//銷燬所有活動
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);//重啟登入介面
}
});
builder.show();
}
}
}
接下來需要,好好補遺漏的知識了。