引言
随着移动互联网的快速发展,移动端编程成为了软件开发领域的一个重要分支。本文将深入解析50个实战案例,涵盖Android和iOS平台,帮助读者了解移动端编程的实战技巧和最佳实践。
案例一:Android基本界面布局
1.1 代码示例
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化组件
TextView textView = findViewById(R.id.text_view);
textView.setText("Hello, Android!");
}
}
1.2 案例解析
本案例展示了如何创建一个简单的Android界面,包括布局文件和组件初始化。
案例二:iOS基本界面布局
2.1 代码示例
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 创建文本标签
let textView = UILabel(frame: CGRect(x: 20, y: 100, width: 280, height: 40))
textView.text = "Hello, iOS!"
textView.textColor = UIColor.black
self.view.addSubview(textView)
}
}
2.2 案例解析
本案例展示了如何创建一个简单的iOS界面,包括视图控制器和组件创建。
案例三:Android网络请求
3.1 代码示例
public class NetworkActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_network);
// 发送网络请求
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
// 处理响应数据
}
});
}
}
3.2 案例解析
本案例展示了如何使用OkHttp库在Android中进行网络请求。
案例四:iOS网络请求
4.1 代码示例
import UIKit
import Alamofire
class NetworkActivity: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 发送网络请求
AF.request("https://api.example.com/data").responseJSON { response in
switch response.result {
case .success(let value):
print(value)
case .failure(let error):
print(error)
}
}
}
}
4.2 案例解析
本案例展示了如何使用Alamofire库在iOS中进行网络请求。
案例五:Android数据库操作
5.1 代码示例
public class DatabaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_database);
// 创建数据库
SQLiteDatabase database = openOrCreateDatabase("mydatabase.db", MODE_PRIVATE, null);
// 创建表
database.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)");
// 插入数据
ContentValues values = new ContentValues();
values.put("name", "John Doe");
database.insert("users", null, values);
// 关闭数据库
database.close();
}
}
5.2 案例解析
本案例展示了如何使用SQLite在Android中进行数据库操作。
案例六:iOS数据库操作
6.1 代码示例
import UIKit
import SQLite
class DatabaseActivity: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 创建数据库
let path = Bundle.main.path(forResource: "mydatabase.db", ofType: nil)!
let db = try? Connection(path)
// 创建表
let users = Table("users")
let id = Expression<Int>("id")
let name = Expression<String>("name")
try? db?.execute(users.create(ifNotExists: true, withoutRowid: true))
// 插入数据
let insert = users.insert(name <- "John Doe")
try? db?.execute(insert)
// 关闭数据库
try? db?.close()
}
}
6.2 案例解析
本案例展示了如何使用SQLite在iOS中进行数据库操作。
案例七:Android定位服务
7.1 代码示例
public class LocationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location);
// 获取定位服务
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// 添加位置监听器
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// 处理位置变化
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
});
}
}
7.2 案例解析
本案例展示了如何使用Android定位服务获取用户位置信息。
案例八:iOS定位服务
8.1 代码示例
import UIKit
import CoreLocation
class LocationActivity: UIViewController, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
// 设置定位服务
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
// 处理位置变化
}
}
8.2 案例解析
本案例展示了如何使用iOS定位服务获取用户位置信息。
案例九:Android二维码扫描
9.1 代码示例
public class QRCodeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qrcode);
// 创建二维码扫描视图
QRCodeView qrCodeView = new QRCodeView(this);
setContentView(qrCodeView);
// 设置二维码扫描回调
qrCodeView.setOnQRCodeListener(new QRCodeView.OnQRCodeListener() {
@Override
public void onQRCodeDecoded(String text) {
// 处理扫描结果
}
});
}
}
9.2 案例解析
本案例展示了如何使用QRCodeView库在Android中进行二维码扫描。
案例十:iOS二维码扫描
10.1 代码示例
import UIKit
import AVFoundation
class QRCodeActivity: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
let captureSession = AVCaptureSession()
let previewLayer = AVCaptureVideoPreviewLayer()
override func viewDidLoad() {
super.viewDidLoad()
// 创建扫描视图
let videoCaptureDevice = AVCaptureDevice.default(for: .video)
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice!)
} catch {
return
}
if let input = videoInput {
captureSession.addInput(input)
}
let metadataOutput = AVCaptureMetadataOutput()
if captureSession.canAddOutput(metadataOutput) {
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = [.qr]
}
previewLayer.frame = view.layer.bounds
previewLayer.videoGravity = .resizeAspectFill
view.layer.addSublayer(previewLayer)
}
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
// 处理扫描结果
}
}
10.2 案例解析
本案例展示了如何使用AVFoundation框架在iOS中进行二维码扫描。
案例十一:Android文件操作
11.1 代码示例
public class FileActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file);
// 创建文件
File file = new File(getFilesDir(), "example.txt");
try {
// 写入文件
FileOutputStream fos = new FileOutputStream(file);
fos.write("Hello, Android!".getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
// 读取文件
try {
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
System.out.write(buffer, 0, len);
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
11.2 案例解析
本案例展示了如何使用Java进行Android文件操作。
案例十二:iOS文件操作
12.1 代码示例
import UIKit
class FileActivity: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 创建文件
let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let filePath = documentsPath.appendingPathComponent("example.txt")
do {
// 写入文件
try "Hello, iOS!".write(to: filePath, atomically: true, encoding: .utf8)
} catch {
print(error)
}
// 读取文件
do {
let content = try String(contentsOf: filePath)
print(content)
} catch {
print(error)
}
}
}
12.2 案例解析
本案例展示了如何使用Swift进行iOS文件操作。
案例十三:Android权限请求
13.1 代码示例
public class PermissionActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permission);
// 请求权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
// 显示权限说明
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 0) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限请求成功
} else {
// 权限请求失败
}
}
}
}
13.2 案例解析
本案例展示了如何使用AndroidManifest.xml和ActivityCompat请求Android应用权限。
案例十四:iOS权限请求
14.1 代码示例
import UIKit
import CoreLocation
class PermissionActivity: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 请求权限
if !CLLocationManager.locationServicesEnabled() {
// 显示权限说明
} else {
switch CLLocationManager.authorizationStatus() {
case .notDetermined:
locationManager.requestWhenInUseAuthorization()
case .restricted, .denied:
// 显示权限说明
case .authorizedAlways, .authorizedWhenInUse:
// 权限请求成功
@unknown default:
break
}
}
}
}
14.2 案例解析
本案例展示了如何使用CLLocationManager请求iOS应用定位权限。
案例十五:Android推送通知
15.1 代码示例
public class NotificationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notification);
// 创建推送通知
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
Notification notification = new NotificationCompat.Builder(this, "channel_id")
.setContentTitle("Notification Title")
.setContentText("Notification Content")
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(pendingIntent)
.build();
notificationManager.notify(0, notification);
}
}
15.2 案例解析
本案例展示了如何使用NotificationManager在Android中创建推送通知。
案例十六:iOS推送通知
16.1 代码示例
import UIKit
import UserNotifications
class NotificationActivity: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 请求权限
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { granted, error in
if granted {
// 权限请求成功
self.scheduleNotification()
} else {
// 权限请求失败
}
}
}
func scheduleNotification() {
let content = UNMutableNotificationContent()
content.title = "Notification Title"
content.body = "Notification Content"
content.sound = UNNotificationSound.default
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: "notification_id", content: content, trigger: trigger)
let center = UNUserNotificationCenter.current()
center.add(request)
}
}
16.2 案例解析
本案例展示了如何使用UserNotifications框架在iOS中创建推送通知。
案例十七:Android多线程
17.1 代码示例
public class ThreadActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thread);
// 创建线程
new Thread(new Runnable() {
@Override
public void run() {
// 执行后台任务
}
}).start();
}
}
17.2 案例解析
本案例展示了如何使用Java创建并启动线程。
案例十八:iOS多线程
18.1 代码示例
import UIKit
class ThreadActivity: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 创建线程
DispatchQueue.global().async {
// 执行后台任务
}
}
}
18.2 案例解析
本案例展示了如何使用Swift创建并启动线程。
案例十九:Android数据存储
19.1 代码示例
public class StorageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_storage);
// 使用SharedPreferences存储数据
SharedPreferences preferences = getSharedPreferences("myapp", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("name", "John Doe");
editor.apply();
String name = preferences.getString("name", "");
// 使用文件存储数据
File file = new File(getFilesDir(), "example.txt");
try {
// 写入文件
FileOutputStream fos = new FileOutputStream(file);
fos.write("Hello, Android!".getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
// 读取文件
try {
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
System.out.write(buffer, 0, len);
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
19.2 案例解析
本案例展示了如何使用SharedPreferences和文件存储数据。
案例二十:iOS数据存储
20.1 代码示例
import UIKit
class StorageActivity: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 使用UserDefaults存储数据
let defaults = UserDefaults.standard
defaults.set("John Doe", forKey: "name")
if let name = defaults.string(forKey: "name") {
// 读取数据
}
// 使用文件存储数据
let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let filePath = documentsPath.appendingPathComponent("example.txt")
do {
// 写入文件
try "Hello, iOS!".write(to: filePath, atomically: true, encoding: .utf8)
} catch {
print(error)
}
// 读取文件
do {
let content = try String(contentsOf: filePath)
print(content)
} catch {
print(error)
}
}
}
20.2 案例解析
本案例展示了如何使用UserDefaults和文件存储数据。
案例二十一:Android图片处理
21.1 代码示例
public class ImageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);
// 加载图片
ImageView imageView = findViewById(R.id.image_view);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
imageView.setImageBitmap(bitmap);
// 图片缩放
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
// 图片旋转
Matrix matrix = new Matrix();
matrix.postRotate(90);
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}
}
21.2 案例解析
本案例展示了如何使用Android Bitmap类进行图片处理。
案例二十二:iOS图片处理
22.1 代码示例
”`swift import UIKit
class ImageActivity: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 加载图片
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
imageView.image = UIImage(named: "image")
self.view.addSubview(imageView)
// 图片缩放
imageView.frame.size =
