安卓应用开发初学
一、第一次不知道如何在手机上调试
刚接触,查找资料以为在模拟器上更还调试,经同事指导:“直接将手机连到电脑上,android studio就可以识别手机,如下图红框1,点击红框2 ,就可以将编译好的apk发送到手机上查看效果”
二、activity组件布局 activity_main.xml
官方activity清单文件学习:https://developer.android.com/guide/topics/manifest/manifest-intro?hl=zh-cn
activity_main.xml默认的标签是<android.constraintlayout.widget.ConstraintLayout>,这个会导致再增加其他如Button时
全部在页面正中间布局,换成LinearLayout就可以多个布局横向或者竖向排列
三、activity是否必须存在?
activity和service等组件时通过AndroidManifest.xml文件启动的....依然有一定的疑问
四、service的创建
https://www.cnblogs.com/linfenghp/p/5571353.html
五、AIDL通信
1、创建一个AidlService的工程
(1)创建一个aidl文件(右键new一个aidl文件)
在新创建的IPay接口里,添加一个pay()方法
(2)创建一个MyService
package com.example.aidlservice;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.Nullable;
public class MyService extends Service {
public MyService(){
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
public void payService(){
Log.i("MyService", "payService : -------");
}
class MyBinder extends IPay.Stub{
@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
}
public void pay(){
payService();
}
}
}
(3)将service组件在AndroidManifest.xml里开启
2、创建AidlClient工程
(1)将AidlService的aidl文件复制过来,注意:AidlClient的aidl文件的包名跟AidlSerive的包名一样,暂时不知如何直接复制过来。
(2)创建一个按钮,绑定远程service
package com.example.aidlclient;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.aidlservice.IPay;
public class MainActivity extends AppCompatActivity {
Button btnPay;
private IPay myBinder;
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder = IPay.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setAction("com.example.aidlservice.MyService");
intent.setPackage("com.example.aidlservice");
bindService(intent, conn, BIND_AUTO_CREATE);
btnPay = (Button)findViewById(R.id.btnPay);
btnPay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
myBinder.pay();
Toast.makeText(getApplicationContext(), "click..hhh..", Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
}
}
(3)创建按钮调用远程服务
学习中出现的问题:
1、AidlClient的aidl文件携程了默认的AidlClient的包名,导致调用出错
AIDl学习参考:
https://www.cnblogs.com/xqz0618/archive/2018/04/27/aidl_service.html(主要参考 )
https://www.cnblogs.com/androidxiaoyang/p/5917570.html
https://www.cnblogs.com/xqz0618/archive/2018/04/27/aidl_service.html