Android api兼容性问题,记录给自己看的赖的去找

跳转到通信录界面问题:

try {
                                    Intent it=null;
                                    if (Build.VERSION.SDK_INT>22){
                                        it = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                                    }else{
                                        it = new Intent(Intent.ACTION_PICK, Contacts.People.CONTENT_URI);
                                    }
                                    startActivityForResult(it, 1);
                                }catch (Exception e){
                                    e.printStackTrace();
                                }

系统8.0限制后台问题

第一种如果前台需要显示通知的话:这里先判断版本是否是大于26,大于使用NotificationChannel创建通,否则使用Notification.Builder创建通知,如果是使用了IntentSercive服务使用JobIntentSercive替换使用。

private void createNotify(){
        String ns = Context.NOTIFICATION_SERVICE;
        mManager = (NotificationManager)getSystemService(ns);
        if (Build.VERSION.SDK_INT>Build.VERSION_CODES.O){
            NotificationChannel channel=new NotificationChannel(CHANNEL_ID,"nitify",NotificationManager.IMPORTANCE_HIGH);
            channel.enableLights(true);
            channel.setLightColor(Color.RED);
            channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
            assert mManager!=null;
            mManager.createNotificationChannel(channel);
            builder=new Notification.Builder(mContext,CHANNEL_ID);
            notification=builder.setSmallIcon(R.mipmap.ic_launcher)
                    .setOnlyAlertOnce(true)//只响一次
                    .setTicker("开始")
                    .setWhen(System.currentTimeMillis())
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//
                    .setContentTitle("通知")
                    .setContentIntent(pendingIntent)
                    .build();
        }else{
            notification=new Notification.Builder(mContext)
                    .setOnlyAlertOnce(true)//只响一次
                    .setTicker("开始")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setWhen(System.currentTimeMillis())
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//
                    .setContentTitle("通知")
                    .setContentIntent(pendingIntent)
                    .build();
        }
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        startForeground(1,notification);
        return super.onStartCommand(intent, flags, startId);
    }

第二种前台不需要显示通知使用JobIntentSercive

public class AddressService extends JobIntentService {
    private static int _sericeId=100011;
    public static void start(Context context){
        Intent intent=new Intent(context,AddressService.class);
        intent.putExtra("data","1111");
        enqueueWork(context,AddressService.class,_sericeId,intent);//启动服务
    }
    @Override
    protected void onHandleWork(@NonNull Intent intent) {
        String data = intent.getStringExtra("data");
    }
}

上只要在MainActivity使用AddressService.start(this)调用就行,这里需要注意的需要在AndroidManifest.xml中添加权限

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>

在添加服务的地方加入android:permission="android.permission.BIND_JOB_SERVICE"代码否则运行报错例:

<service android:name=".AddressService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            />

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值