gpt4 book ai didi

android - 在 android 中获取联系人时遇到问题?

转载 作者:行者123 更新时间:2023-11-29 16:16:34 25 4
gpt4 key购买 nike

我正在开发一个 android 应用程序,它在一个 Activity 中有一个按钮,当用户单击该按钮时,它应该创建另一个 Activity ,该 Activity 应该在我自己的 ListView 中显示我的所有联系信息。我的代码如下

package com.softtrends.practice.contactmanager;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ContactManagerActivity extends Activity implements OnClickListener{
final int PICK_CONTACT_REQUEST=1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final Button contacts=(Button) findViewById(R.id.contacts);
contacts.setOnClickListener(this);
}
@Override
public void onClick(View v){
Intent contactIntent = new Intent(this, ContactsActivity.class);
startActivity(contactIntent);
}
}

package com.softtrends.practice.contactmanager;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ContactsActivity extends ListActivity {
private Cursor cur;
private String names[];
private void getData(){
cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
null, null,null, null);
startManagingCursor(cur);
names=new String[cur.getCount()];
int nameCol=cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);
int i=0;
while(cur.moveToNext()){
names[i]=cur.getString(nameCol);
System.out.println(names[i]);
i++;
}
cur.close();
}
public void onCreate(Bundle bundle){
super.onCreate(bundle);
getData();
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_view, names));

ListView lv=getListView();
lv.setTextFilterEnabled(true);
}
}

在运行此应用程序时,它按预期显示了第一个 Activity ,但是当我单击该按钮时,出现了强制关闭错误,并且在 logcat 中,该错误显示在我调用查询方法的那一行。

我的日志是

 01-25 14:07:05.239: DEBUG/dalvikvm(127): GC_EXPLICIT freed 179 objects / 9288 bytes in 163ms
01-25 14:07:09.249: INFO/ActivityManager(59): Starting activity: Intent{ cmp= com.softtrends.practice.contactmanager/.ContactsActivity }
01-25 14:07:09.389: ERROR/DatabaseUtils(164): Writing exception to parcel
01-25 14:07:09.389: ERROR/DatabaseUtils(164): java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/contacts from pid=386, uid=10040 requires android.permission.READ_CONTACTS
01-25 14:07:09.389: ERROR/DatabaseUtils(164): at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:271)
01-25 14:07:09.389: ERROR/DatabaseUtils(164): at android.content.ContentProvider$Transport.bulkQuery(ContentProvider.java:149)
01-25 14:07:09.389: ERROR/DatabaseUtils(164): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:111)
01-25 14:07:09.389: ERROR/DatabaseUtils(164): at android.os.Binder.execTransact(Binder.java:288)
01-25 14:07:09.389: ERROR/DatabaseUtils(164): at dalvik.system.NativeStart.run(Native Method)
01-25 14:07:09.389: DEBUG/AndroidRuntime(386): Shutting down VM
01-25 14:07:09.389: WARN/dalvikvm(386): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): FATAL EXCEPTION: main
01-25 14:07:09.420: ERROR/AndroidRuntime(386): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.softtrends.practice.contactmanager/com.softtrends.practice.contactmanager.ContactsActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/contacts from pid=386, uid=10040 requires android.permission.READ_CONTACTS
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.os.Handler.dispatchMessage(Handler.java:99)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.os.Looper.loop(Looper.java:123)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at java.lang.reflect.Method.invoke(Method.java:521)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at dalvik.system.NativeStart.main(Native Method)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/contacts from pid=386, uid=10040 requires android.permission.READ_CONTACTS
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.os.Parcel.readException(Parcel.java:1247)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.content.ContentResolver.query(ContentResolver.java:245)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at com.softtrends.practice.contactmanager.ContactsActivity.onCreate(ContactsActivity.java:29)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
01-25 14:07:09.420: ERROR/AndroidRuntime(386): ... 11 more
01-25 14:07:09.439: WARN/ActivityManager(59): Force finishing activity com.softtrends.practice.contactmanager/.ContactsActivity
01-25 14:07:09.439: WARN/ActivityManager(59): Force finishing activity com.softtrends.practice.contactmanager/.ContactManagerActivity
01-25 14:07:09.579: DEBUG/dalvikvm(59): GC_FOR_MALLOC freed 11214 objects / 557344 bytes in 116ms
01-25 14:07:09.839: DEBUG/SntpClient(59): request time failed: java.net.SocketException: Address family not supported by protocol
01-25 14:07:09.980: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{450d30d0 com.softtrends.practice.contactmanager/.ContactsActivity}
01-25 14:07:15.710: DEBUG/dalvikvm(164): GC_EXPLICIT freed 121 objects / 13752 bytes in 148ms
01-25 14:07:20.443: WARN/ActivityManager(59): Activity destroy timeout for HistoryRecord{4509d8d0 com.softtrends.practice.contactmanager/.ContactManagerActivity}
01-25 14:07:20.443: WARN/ActivityManager(59): Activity destroy timeout for HistoryRecord{450d30d0 com.softtrends.practice.contactmanager/.ContactsActivity}

有些人可能认为根据 logcat,它需要 READ_CONTACTS 权限。但是让我告诉大家,我已经在我的 menifest 文件中设置了这个权限。这是我的 list 文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.softtrends.practice.contactmanager"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<user-permission android:name="android.permission.READ_CONTACTS"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ContactManagerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ContactsActivity"></activity>
</application>
</manifest>

最佳答案

正如日志所说,您需要 android.permission.READ_CONTACTS,因此将其添加到 list 中:

<manifest>
....
<uses-permission android:name="android.permission.READ_CONTACTS" />
</manifest>

如果你也需要写入,添加

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

关于android - 在 android 中获取联系人时遇到问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com