//READ_CALL_LOG权限在首次安装应用程序后仅起作用一次。当我从安卓工作室再次安装它时,权限不会出现,应用程序也不会读取呼叫日志。安装并关闭应用程序后也会发生这种情况。再次打开应用程序后,呼叫日志消失。我也从另一个登录活动调用此活动
//我的AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.calllog">
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<application
android:allowBackup="true"
android:icon="@drawable/img"
android:label="@string/app_name"
android:roundIcon="@drawable/img"
android:supportsRtl="true"
android:theme="@style/Theme.CallLog"
android:usesCleartextTraffic="true">
<activity
android:name=".HomeActivity"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity2"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="false">
</activity>
</application>
</manifest>
//我的主要活动
//MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.READ_CALL_LOG), 101)
displayLog()
}
}
private fun displayLog() {
var cols= arrayOf(CallLog.Calls._ID, CallLog.Calls.NUMBER, CallLog.Calls.TYPE, CallLog.Calls.DURATION,CallLog.Calls.DATE)
var rs=contentResolver.query(CallLog.Calls.CONTENT_URI,cols,null,null, "${CallLog.Calls.LAST_MODIFIED} DESC")
var from= arrayOf(CallLog.Calls.NUMBER,CallLog.Calls.DURATION,CallLog.Calls.TYPE)
val adapter=SimpleCursorAdapter(this, R.layout.mylayout,rs,from, intArrayOf(R.id.textView1,R.id.textView2,R.id.textView3),0)
val listview=findViewById<ListView>(R.id.listview) as ListView
listview.adapter=adapter
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if(requestCode==101 && grantResults[0]==PackageManager.PERMISSION_GRANTED) {
displayLog()
}
}
}
如果将if块更改为此,则在已授予权限的情况下不会处理此情况。
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.READ_CALL_LOG), 101)
}else{
displayLog()
}