編輯:關於Android編程
在Android開發時,有時因為需求,需要跳轉到系統的一些頁面,比如從UI中跳轉到系統設置項、WIFI設置等,那要如何返回到原來的Activity中呢?
我們可以通過WindowManager來實現。原理可以簡單的理解為在跳轉到系統的Activity中後,在該Activity的上方添加一個按鈕,然後對這個按鈕添加事件。
先看看效果圖
實現代碼如下<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Q2FsbFN5c3RlbUFjdGl2aXR5LmphdmE8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">package com.example.callsystemactivity; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Init(); } private void Init() { Button callSystemSet_button=(Button)findViewById(R.id.CallSystemSet_button); callSystemSet_button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub WindowManagerSp windowManagerSp=new WindowManagerSp(MainActivity.this); windowManagerSp.AddBackButton(); IntentSp.StartActivity(MainActivity.this, android.provider.Settings.ACTION_WIFI_IP_SETTINGS,false); } }); } }
注:
1、需要在activity_main.xml中添加一個按鈕callSystemSet_button
2、WindowManager需要相應的權限,所以需要在AndroidManifest.xml中添加權限,如下
WindowManagerSp.java
package com.example.callsystemactivity; import android.app.Activity; import android.content.Context; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.ImageView; public class WindowManagerSp { WindowManager _winManager = null; Activity _activity = null; Context _context = null; public WindowManagerSp(Activity activity) { if (activity == null) { return; } _activity = activity; _context = _activity.getBaseContext(); _winManager = (WindowManager) _activity.getApplicationContext() .getSystemService(_activity.WINDOW_SERVICE); } public void AddBackButton() { if (_winManager == null) { return; } WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); layoutParams.gravity = Gravity.TOP | Gravity.LEFT; layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; // 以下width/height/x/y不一定是最合適的,需根據實現的頁面加以調整 layoutParams.width = 32; layoutParams.height = 32; layoutParams.x = 280; layoutParams.y = 0; final ImageView backButton = new ImageView(_context); backButton.setBackgroundResource(R.drawable.back);// 請自行添加相應的背景圖片 backButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { IntentSp.RestartActivity(_activity, false);// 在另一個類中 if (_winManager != null) { _winManager.removeView(backButton); } _winManager = null; } }); _activity.finish();// 關閉activity,在返回時再次開啟 _winManager.addView(backButton, layoutParams); } }
IntentSp.java
package com.kitsp.contentsp; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.net.Uri; public class IntentSp { /** * * @param activity * @param isSaveActivityToHistory * true:save activity to history.System may back to the activity * when other activity finish. false:no save. */ public static void RestartActivity(Activity activity, boolean isSaveActivityToHistory) { if (activity == null) { return; } Intent intent = new Intent(); String packageName = activity.getPackageName(); String className = activity.getLocalClassName(); String componentClassName = packageName + "." + className; if (className != null && className.split(".").length > 0) { componentClassName = className; } ComponentName componentName = new ComponentName(packageName, componentClassName); intent.setComponent(componentName); if (!isSaveActivityToHistory) { intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);//添加該標志後,讓activity不保存 } activity.startActivity(intent); activity.finish(); return; } /** * * @param context * @param action * @param isSaveActivityToHistory * true:save activity to history.System may back to the activity * when other activity finish. false:no save. */ public static void StartActivity(Context context, String action, boolean isSaveActivityToHistory) { if (context == null || action == null) { return; } Intent intent = new Intent(action); if (!isSaveActivityToHistory) { intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); } context.startActivity(intent); } }注:
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)是為了不讓系統的activity在開啟後一直存在,如果不這樣處理,在點硬返回鍵時,才不會返回到系統的activity中。因為由A應用開啟B應用的Activity,正常是無法從A中關閉B應用的Activity的,對於我們啟動系統的Activity也是一樣的道理。所以為了避免該問題,我們增加了flag,這樣啟動後的activity就不會保存到activity的堆棧中,自然在點返回時,也就不會返回到該activity中了。
最近在搗鼓android 自定義控件屬性,學到了TypedArray以及attrs。在這其中看了一篇大神博客Android 深入理解Android中的自定義屬性。我就更加
1.介紹Runtime Permissions官方說明Android 6.0之前,權限在應用安裝過程中只詢問一次,以列表的形式展現給用戶,然而大多數用戶並不會注意到這些,
項目介紹 因為要參加某信息安全比賽,選擇了安卓apk的行為分析與評估的課題,所以首先需要了解安卓程序是怎樣編寫和運行的。我們的第一個任務就是寫出一個多人通信的app。
1.Fragment概述 在一個Activity中, Fragment代表UI的一個部分或者一個行為。一個Activity可以結合多個Fragment對象,