安卓应用开发初学

一、第一次不知道如何在手机上调试

刚接触,查找资料以为在模拟器上更还调试,经同事指导:“直接将手机连到电脑上,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(主要参考

Android Studio中aidl的使用示例-百度经验

android进阶-AIDL的基本使用 - 简书

https://www.cnblogs.com/androidxiaoyang/p/5917570.html

AIDL使用详解及原理 - 简书

https://www.cnblogs.com/xqz0618/archive/2018/04/27/aidl_service.html

Android Studio中aidl的使用示例-百度经验

布局  |  Android 开发者  |  Android Developers

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值