1.权限机制
添加权限后
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button makeCall = findViewById(R.id.make_call);makeCall.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);} else {call();}}});}private void call() {try {Intent intent = new Intent(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:10086"));startActivity(intent);} catch (SecurityException e) {e.printStackTrace();}}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {switch (requestCode) {case 1:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {call();} else {Toast.makeText(MainActivity.this, "You denied the permission", Toast.LENGTH_SHORT).show();}break;default:break;}}}
3. 访问其他程序中的数据
内容提供器分为系统内置和 自定义实现的内容提供器。应用程序通过内容提供器对其数据提供了外部访问接口。Android系统中自带的电话簿,短信,媒体库等程序都提供了类似的访问接口。
ContentResolver**
应用程序通过ContentResolver类来访问其他应用程序共享的数据,可以通过Context中的getContentResolver()方法获取到该类的实例。
package com.example.contactstest;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;import androidx.core.content.ContextCompat;import android.Manifest;import android.content.pm.PackageManager;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;import java.util.Currency;import java.util.List;public class MainActivity extends AppCompatActivity {ArrayAdapter<String> adapter;List<String> contactList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView contactView = (ListView) findViewById(R.id.contacts_view);adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contactList);contactView.setAdapter(adapter);if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1);} else {readContacts();}}private void readContacts() {Cursor cursor = null;try {cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);if (cursor != null) {while (cursor.moveToNext()) {String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));contactList.add(displayName + "\n" + number);}adapter.notifyDataSetChanged();}} catch (Exception e) {e.printStackTrace();} finally {if (cursor != null) {cursor.close();}}}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int [] grantResults) {switch (requestCode) {case 1:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {readContacts();} else {Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();}break;default:break;}}}
4.创建自己的内容提供器
TODO
